recvmsg devuelve 'EAGAIN (recurso no disponible temporalmente)'

11

Después de un movimiento reciente del servidor, estamos solucionando este extraño problema de uno de los servidores que pierde la conectividad n / w sin razón aparente y recupera la conectividad en unos pocos segundos o minutos. No hay rastros de ello en /var/log/messages dmesgmcelogs. Mientras buscaba tratar de depurar esto, emití strace ping google.comy dice = -1 EAGAIN (Resource temporarily unavailable).

¿Alguien podría arrojar luz sobre lo que podría significar este mensaje? pingresuelve google.com, pero no muestra ninguna respuesta como si las respuestas de ping estuvieran configuradas para rechazar en el 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)

PD: Esta es una VM VMware y ejecuta RHEL 6.5

Luz de la ciudad
fuente

Respuestas:

13

Cuando lee desde un socket (o tubería u otra fuente asíncrona), puede elegir qué sucede si no hay datos disponibles de inmediato. Puede hacer que la lectura espere hasta que lleguen algunos datos (modo de bloqueo) o puede hacer que regrese inmediatamente con un error (modo sin bloqueo).

El error que devuelve en el segundo caso es EAGAIN.

Entonces el EAGAINerror realmente no te dice nada aquí. Simplemente significa que no había nada que recvmsg()recibir en ese momento.

Jander
fuente
0

Recibía este error al intentar leer stdinmientras no había stdin, por ejemplo, isTTYera falso.

localhostdotdev
fuente