udp 프로그램에서 이해가 안되는것이 있습니다.

cjy1126의 이미지

udp를 이용해서 에코서버를 작성했습니다.

클라이언트에서 보내는 부분입니다.

             str_len = sendto(sock, message, strlen(message), 0, 
                            (struct sockaddr*)&serv_addr, sizeof(serv_addr));
                addr_size = sizeof(from_addr);
                printf("sendto: %s... str_len: %2d\n", message, str_len);

                str_len = recvfrom(sock, message, BUFSIZE, 0,
                             (struct sockaddr*)&from_addr, &addr_size);
                printf("recvfr: %s... str_len: %2d\n", message, str_len);

서버에서 보내는 부분입니다.

                clnt_addr_size = sizeof(clnt_addr);
                str_len = recvfrom(serv_sock, message, BUFSIZE, 0,
                             (struct sockaddr*)&clnt_addr, &clnt_addr_size);
                printf("str_len = %2d\n", str_len);

                sendto(serv_sock, message, str_len, 0,
                          (struct sockaddr*)&clnt_addr, sizeof(clnt_addr));

양쪽 결과값입니다.

str_len =  0
str_len =  0
str_len =  0
str_len =  0
str_len =  0
str_len =  0

sendto에서 리턴값이 0이기때문에 못보내야 하는것 아닌가요?

아무것도 없는 message에 0개의 데이터를 보냈다는건 무슨뜻인가요?

kuma의 이미지

0 byte 송신 되어졌다는 뜻입니다. socket 에 문제가 있다는것과는 다른 문제 입니다.

MSDN 도움말 인용입니다.
Calling sendto with a len of zero is permissible and will return zero as a valid value. For message-oriented sockets, a zero-length transport datagram is sent