recvmsg renvoie 'EAGAIN (Ressource temporairement indisponible)'


11

Après un récent déplacement du serveur, nous résolvons ce problème étrange d'un des serveurs perdant la connectivité n / w sans raison apparente et retrouvant la connectivité en quelques secondes ou minutes. Il n'y en a aucune trace dans /var/log/messages dmesgou mcelogs. En cherchant à déboguer cela, j'ai émis strace ping google.comet ça dit = -1 EAGAIN (Resource temporarily unavailable).

Quelqu'un pourrait-il éclairer la signification de ce message? pingrésout google.com, mais il n'affiche aucune réponse comme si les réponses ping étaient définies pour être rejetées dans le pare-feu.

sendmsg(3, {msg_name(16)={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("74.125.131.113")}, msg_iov(1)=[{"\10\0005\321?i\0\3v\301lT\0\0\0\0\335\331\3\0\0\0\0\0\20\21\22\23\24\25\26\27"..., 64}], msg_controllen=0, msg_flags=0}, 0) = 64
recvmsg(3, 0x7fffd48b9cc0, 0)           = -1 EAGAIN (Resource temporarily unavailable)

PS: il s'agit d'une machine virtuelle VMware et exécute RHEL 6.5

Réponses:


13

Lorsque vous lisez à partir d'une socket (ou d'un tuyau ou d'une autre source asynchrone), vous pouvez choisir ce qui se passe s'il n'y a pas de données immédiatement disponibles. Soit vous pouvez faire patienter la lecture jusqu'à ce que certaines données arrivent (mode de blocage), soit vous pouvez la renvoyer immédiatement avec une erreur (mode non bloquant).

L'erreur qu'il renvoie dans le deuxième cas est EAGAIN.

Donc, l' EAGAINerreur ne vous dit rien ici. Cela signifie simplement qu'il n'y avait rien recvmsg()à recevoir à ce moment-là.


0

J'obtenais cette erreur en essayant de lire depuis stdinqu'il n'y en avait pas stdin, par exemple isTTYétait faux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.