sendto: Ресурс временно недоступен (errno 11)

У меня проблема с sendto.

У меня есть получатель, который получает пакеты UPD с помощью recvfrom, а затем отвечает отправителю с помощью sendto.

К сожалению, , Я получаю сообщение об ошибке 11 (ресурс временно недоступен). Я использую два сокета.

Фактически отправляется первый пакет, но не последующие:

sendto :: Success

ошибка: 0.

sendto :: Resource временно недоступен

ошибка: 11.

sendto :: Resource временно недоступен

...

Это отрывок из моего кода:

    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);

     }

Может ли эта проблема возникнуть из-за того, что порт все еще активен, и мне нужно подождать, прежде чем использовать его повторно? Я пытался сменить порт, но это не помогло.

Обновление: если sleep (1) закомментирован, то пакеты действительно будут отправлены!

Большое спасибо за вашу помощь.

5
задан Jary 21 April 2011 в 00:03
поделиться