sockets - example - select() in r
Notificación espuria de preparación para la llamada Select System (1)
Esta no es exactamente una respuesta, pero mirando por encima de epoll, estos problemas parecen estar resueltos para ello.
Y si puedo confiar en este mensaje en netdev, al menos trataron de arreglarlo en poll () y seleccionar () también (rompiendo otras cosas).
Por lo tanto, este error no parece ser relevante en un futuro previsible.
En http://linux.die.net/man/2/select , debajo de la sección ERRORES se menciona que la llamada del sistema de selección a veces configura falsamente el FD y la llamada de lectura posterior devolverá 0. El texto describe uno de esos ejemplos (suma de comprobación incorrecta), pero supongo que también habría otras razones (de lo contrario, habrían solucionado esto).
Alguna idea de qué podría hacer la otra para que Select devuelva un FD listo de forma espuria.
y esto se aplica a otros sistemas operativos también. Actualmente estoy preguntando por Linux.
Sección relevante para el enlace de arriba:
En Linux, select () puede informar un descriptor de archivo de socket como "listo para leer", mientras que una lectura posterior bloquea. Esto podría ocurrir, por ejemplo, cuando los datos han llegado, pero cuando el examen tiene una suma de comprobación incorrecta y se descarta. Puede haber otras circunstancias en las que un descriptor de archivo se informa falsamente como listo. Por lo tanto, puede ser más seguro usar O_NONBLOCK en sockets que no deberían bloquearse.