选择系统调用的虚假就绪通知

Adi*_*gal 9 sockets select system-calls

http://linux.die.net/man/2/select上,在BUGS部分,提到选择系统调用有时可以虚假地设置FD就绪,随后的读取调用将返回0.文本描述了一个这样的例子(错误的校验和)但我假设还有其他原因(否则他们会解决这个问题).

任何想法可能导致另一个原因选择返回FD准备虚假.

这是否也适用于其他操作系统.我目前正在询问Linux.

上述链接的相关部分:

在Linux下,select()可以将套接字文件描述符报告为"准备好读取",而不是后续的读取块.这可能例如在数据到达时发生但在检查时具有错误的校验和并被丢弃.可能存在其他情况,其中虚假地报告文件描述符为就绪.因此,在不应阻塞的套接字上使用O_NONBLOCK可能更安全.

hyn*_*nek 1

这并不完全是一个答案,但是查看epoll,这些问题似乎都得到了解决。

如果我可以相信netdev 中的这条消息,他们至少也尝试在 poll() 和 select() 中修复它(破坏其他东西)。

因此,这个错误在可预见的将来似乎并不相关。