/ / ERROR en aceptar: recurso no disponible temporalmente - c, linux, sockets

ERROR en aceptar: recurso no disponible temporalmente - c, linux, sockets

Estoy intentando crear un servidor de un solo hilo en linux (red-hut) en C que escuchará múltiples sockets.

Necesito usar sockets no bloqueantes, cuando configuro las banderas como no bloqueantes como esta:

int flagss = fcntl(socketfds[j],F_GETFL,0);
flagss |= O_NONBLOCK;
fcntl(socketfds[j],F_SETFL,flagss);

Yo obtengo:

ERROR on accept: Resource temporarily unavailable

De lo contrario todo funciona perfectamente.

Respuestas

13 para la respuesta № 1

El recurso no disponible temporalmente es EAGAIN y eso no es realmente un error. Significa que "No tengo una respuesta para usted en este momento y usted me ha dicho que no espere, así que aquí estoy regresando sin respuesta".

Si configura una toma de escucha para que no se bloquee como parece hacerlo, accept se supone que debe establecer errno en ese valor cuando no hay clientes que intenten conectarse. Puede esperar la conexión entrante utilizando el select (tradicional) o poll (semánticamente equivalente, una interfaz más nueva, preferida a menos que necesite ejecutarse en unix antiguo sin ella) o epoll (optimizado para miles de descriptores, específico de Linux) llamadas al sistema.

Por supuesto que estarás usando poll (o cualquiera de las alternativas) para esperar datos en la toma de escucha o en cualquiera de las tomas de datos.