recvmsg gibt 'EAGAIN (Ressource vorübergehend nicht verfügbar)' zurück.

11

Nach einem kürzlich erfolgten Serverumzug beheben wir dieses seltsame Problem, bei dem einer der Server ohne ersichtlichen Grund die n / w-Konnektivität verliert und die Konnektivität innerhalb weniger Sekunden oder Minuten wieder herstellt. Es gibt keine Spuren davon in /var/log/messages dmesgoder mcelogs. Beim Versuch, dies zu debuggen, habe ich ausgegeben strace ping google.comund es heißt = -1 EAGAIN (Resource temporarily unavailable).

Könnte jemand Licht ins Dunkel bringen, was diese Botschaft bedeuten könnte? pingBehebt google.com, zeigt jedoch keine Antwort an, als ob Ping-Antworten in der Firewall abgelehnt werden sollen.

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: Dies ist eine VMware-VM, auf der RHEL 6.5 ausgeführt wird

Sree
quelle

Antworten:

12

Wenn Sie von einem Socket (oder einer Pipe oder einer anderen asynchronen Quelle) lesen, können Sie auswählen, was passiert, wenn keine Daten sofort verfügbar sind. Entweder können Sie den Lesevorgang warten lassen, bis einige Daten eintreffen (Blockierungsmodus), oder Sie können ihn sofort mit einem Fehler zurückgeben lassen (Nichtblockierungsmodus).

Der Fehler, den es im zweiten Fall zurückgibt, ist EAGAIN.

Der EAGAINFehler sagt Ihnen hier also nichts. Es bedeutet nur, dass es in diesem Moment nichts recvmsg()zu empfangen gab.

Jander
quelle
0

Ich habe diesen Fehler erhalten, indem ich versucht habe, zu lesen, stdinwährend es kein gab stdin, z isTTY. B. falsch.

localhostdotdev
quelle