| 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_DONTWAITo 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
EAGAINde 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.