¿Cómo se informa un error del socket asincrónico?


7

Estoy conectando un socket asincrónicamente (O_NONBLOCK + connect). El estándar POSIX especifica que después de que se haya conectado el socket, debe señalar el evento al hacer que el descriptor del archivo para el socket esté listo para la escritura. No parece decir nada sobre las fallas durante la conexión asíncrona.

Al probarlo en Linux, parece que a veces recibo POLLOUT y, a veces, POLLERR en esta situación. ¿Hay algún patrón en el comportamiento? ¿Puedo informar los errores de una sola manera? ¿POSIX dice algo que he pasado por alto?

4

D. J. Bernstein tiene algunas cosas que podrían ser relevantes: http://cr.yp.to/docs/connect.html. En particular, sugiere varias formas diferentes de obtener errores.

El FAQ UNIX socket tiene una sección sobre Connect with timeout, que incluye obtener el error de una conexión fallida usando getsockopt

  0

Ambos textos suponen que la conexión notifica al usuario sobre el éxito de conexión/fallo por caso POLLOUT. Sin embargo, lo que estoy viendo es que Linux usa POLLOERR o POLLERR para este propósito. 22 feb. 092009-02-22 11:28:09