¿Qué significa el código errno 11 (EAGAIN) en Linux?

 
También puede significar:
ConstanteTipoSO
ERROR_BAD_FORMATError de WindowsWindows
KERN_ALREADY_IN_SETRetorno del kernel de macOSmacOS
ippStsResFloorEstado de Intel IPPCualquiera
EDEADLKerrnomacOS
EAGAINerrnoSolaris
EAGAINerrnoWindows
NO_EXCEPTION_HANDLING_SUPPORTCódigo BSODWindows
Anterior Siguiente
ECHILD EDEADLK

EAGAIN

Qué significa EAGAIN

En sockets, EAGAIN suele ser una señal normal de backpressure, no una conexión rota. Una lectura no bloqueante todavía no tiene datos o una escritura no puede aceptar más bytes en el búfer local. También puede aparecer cuando expira un timeout configurado para ciertas operaciones de socket.

El código portable debe considerar también EWOULDBLOCK. POSIX permite que sean valores distintos, aunque Linux los define con el mismo número para sockets. Repetir el syscall en un bucle cerrado solo consume CPU: un event loop debe esperar el evento de readiness adecuado.

Qué comprobar

  • Comprueba si están activos O_NONBLOCK, MSG_DONTWAIT o timeouts de socket.
  • En escritura, conserva los bytes pendientes y reanuda desde el offset correcto cuando el socket vuelva a ser escribible.
  • En lectura, diferencia EAGAIN de un retorno de longitud cero, que en un stream tiene otra semántica.
  • En Linux, un socket de datagramas no enlazado también puede verlo si se agota el rango de puertos efímeros; conserva la llamada y el tipo de socket.

Referencias técnicas


¿Buscas un código diferente? Buscar otro código de estado o error.