Я использую опцию SO_REUSEADDR, но я не уверен, почему получаю
Ресурс временно недоступен.
Я тестирую код клиентского сервера на 127.0.0.1
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 )
{
perror("socket() error!!\n");
exit(1);
}
if ( setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse) ) < 0 ) {
perror("SO_REUSEADDR failed::");
exit(1);
}
while(1) {
nbytes_read = recvfrom(sockfd, (void *)&recvd_msg, sizeof(recvd_msg),
flags, &from, &from_len);
printf("nbytes_read = %d\n", nbytes_read);
if(nbytes_read == -1) {
perror("client: recvfrom() failed");
return FAILED;
}
if (nbytes_read > 0) {
if(recvd_msg.hdr.msgtype == DATA)
printf("recvd %d bytes from server\n", recvd_msg.hdr.payload_size);
ftp_show_payload(&recvd_msg);
}
if(recvd_msg.hdr.is_last == TRUE) {
break;
}
}
Сообщение об ошибке:
"client: recvfrom () не удалось: ресурс временно недоступен"
ERRNO: 11
После попытки запустить клиент 3-4 раза, я получаю данные, я не уверен, что происходит.
Кроме того, эта проблема возникает в Ubuntu Linux, но когда я запускаю тот же клиентский сервер в Solaris,
работает отлично !!