J'ai un problème avec sendto.sendto: Ressource temporairement indisponible (errno 11)
J'ai un récepteur qui reçoit des paquets UPD avec recvfrom puis répond à l'expéditeur en utilisant sendto.
Malheureusement, je reçois errno 11 (ressource momentanément indisponible). J'utilise deux prises.
Le premier paquet est effectivement envoyé, mais pas ceux après:
sendto :: Succès
erreur: 0.
sendto :: ressource temporairement indisponible
erreur: 11.
sendto :: Ressource temporairement indisponible
...
Ceci est un extrait de mon code:
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");
Et dans un gestionnaire 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);
}
cette question pourrait venir parce que le port est encore chaud, et je besoin d'attendre avant de le réutiliser? J'ai essayé de changer de port mais ça n'a pas aidé.
Mise à jour: Si le sommeil (1) est commenté, les paquets se fait envoyer!
Merci beaucoup pour votre aide.
Utilisez-vous deux prises avec le même port? Si oui, quelle est la raison? – penguin359
Peut-être 'SO_REUSEADDR' aiderait. Ou vous pouvez simplement garder le port ouvert plutôt que de l'ouvrir et de le fermer, ou utiliser un nouveau numéro de port assigné au hasard à chaque fois si c'est faisable. –
J'ai ajouté plus de code. J'ai 2 sockets mais un seul est lié à un port (pour recevoir des données sur un port spécifique), l'autre peut envoyer des données à partir de n'importe quel port. – Jary