У меня проблема с sendto.
У меня есть получатель, который получает пакеты UPD с помощью recvfrom, а затем отвечает отправителю с помощью sendto.
К сожалению, я получаю сообщение об ошибке 11 (Ресурс временно недоступен).Я использую два сокета.
Первый пакет фактически отправлен, но не тот, что потом:
sendto :: Success
ошибка: 0.
sendto :: Ресурс временно недоступен
ошибка: 11.
sendto :: Ресурс временно недоступен
...
Это выдержка из моего кода:
int sockfd, sockSend;
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
perror("socket");
if ((sockSend = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
perror("socket");
if (fcntl(sockfd, F_SETOWN, getpid()) < 0) {
perror("fcntl");
}
if (fcntl(sockfd, F_SETFL, O_RDONLY | O_NONBLOCK | FASYNC) < 0) {
perror("fcntl");
}
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr))
< 0)
perror("bind");
А в обработчике SIGIO:
len = sizeof(recv_addr);
char buffer[payload];
bzero(buffer, payload);
n = recvfrom(sockfd, buffer, payload, MSG_DONTWAIT, (struct sockaddr *)&recv_addr, &len);
while (n > 0) {
sprintf(response, "%d\n%d\n%d\n", items, target_buf, pb_sp);
sendto(sockSend, response, strlen(response), 0, (struct sockaddr *) &recv_addr, sizeof(recv_addr));
// sleep(1);
perror("sendto :");
printf("error: %d.\n", errno);
}
Может ли эта проблема возникнуть, поскольку порт еще горячий, и мне нужно подождать, прежде чем использовать его повторно?Я пытался сменить порт, но это не помогло.
Обновление: если сон (1) закомментирован, то пакеты действительно отправляются!
Большое спасибо за вашпомощь.