10

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

任何想法可能导致 Select 虚假返回 FD 就绪的其他原因。

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

上面链接的相关部分:

在 Linux 下,select() 可能会将套接字文件描述符报告为“准备好读取”,但随后会出现读取块。例如,当数据到达但检查时校验和错误并被丢弃时,可能会发生这种情况。可能存在文件描述符被虚假报告为就绪的其他情况。因此,在不应阻塞的套接字上使用 O_NONBLOCK 可能更安全。

4

1 回答 1

1

这不完全是一个答案,但是翻看epoll,这些问题似乎都为它解决了。

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

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

于 2011-04-01T08:25:47.780 回答