【发布时间】:2010-10-25 21:20:46
【问题描述】:
在http://linux.die.net/man/2/select 的BUGS 部分下,提到select 系统调用有时可能会虚假地将FD 设置为就绪,随后的read 调用将返回0。文本描述了一个这样的示例(错误校验和),但我假设那里也会有其他原因(否则他们会解决这个问题)。
任何想法可能导致 Select 虚假返回 FD 就绪的其他原因。
这是否也适用于其他操作系统。我目前正在询问 Linux。
以上链接的相关部分:
在 Linux 下,select() 可能会报告一个 套接字文件描述符为“准备好 阅读”,尽管如此 后续读取块。这可以为 数据到达时发生的示例 但经检查有错 校验和并被丢弃。也许有 是文件的其他情况 描述符被虚假报告为 准备好。因此使用起来可能更安全 O_NONBLOCK 在不应该的套接字上 块。
【问题讨论】:
标签: sockets select system-calls