recvmsg restituisce "EAGAIN (risorsa temporaneamente non disponibile)"


11

Dopo un recente spostamento del server, stiamo risolvendo questo strano problema di perdita di connettività n / n di uno dei server senza motivo apparente e recupero della connettività in pochi secondi o minuti. Non ci sono tracce di esso /var/log/messages dmesgo mcelogs. Mentre cercavo di eseguire il debug di questo, ho emesso strace ping google.come dice = -1 EAGAIN (Resource temporarily unavailable).

Qualcuno potrebbe far luce sul significato di questo messaggio? pingrisolve google.com, ma non mostrerebbe alcuna risposta come se le risposte ping fossero impostate per rifiutare nel firewall.

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: questa è una VM VMware ed esegue RHEL 6.5

Risposte:


13

Quando leggi da un socket (o pipe o altra fonte asincrona), puoi scegliere cosa succede se non ci sono dati immediatamente disponibili. O puoi avere l'attesa di lettura fino all'arrivo di alcuni dati (modalità di blocco), oppure puoi farli tornare immediatamente con un errore (modalità di non blocco).

L'errore che restituisce nel secondo caso è EAGAIN.

Quindi l' EAGAINerrore non ti sta davvero dicendo nulla qui. Significa solo che non c'era nulla recvmsg()da ricevere in quel momento.


0

Stavo ottenendo questo errore provando a leggere stdinmentre non c'era stdin, ad esempio isTTYera falso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.