【发布时间】:2011-06-15 12:23:46
【问题描述】:
我正在尝试让 select 正常工作,即使在套接字上没有可读取的内容时,它似乎也返回 1。所以我最终调用了 recv 并且它阻塞了,因为没有什么可读取的。
同样令人讨厌的是,对于 winsock,每次调用 select 时都必须调用 FD_SET,这与标准实现不一致。
我还需要注意其他奇怪的怪癖吗?
【问题讨论】:
-
向我们展示您的代码。没有它,我们就可以知道哪里出了问题。
我正在尝试让 select 正常工作,即使在套接字上没有可读取的内容时,它似乎也返回 1。所以我最终调用了 recv 并且它阻塞了,因为没有什么可读取的。
同样令人讨厌的是,对于 winsock,每次调用 select 时都必须调用 FD_SET,这与标准实现不一致。
我还需要注意其他奇怪的怪癖吗?
【问题讨论】:
我已修复它,但我无法确定问题的确切原因是什么。我知道必须使用FD_SET 重新设置每个select() 调用的集合是非常相关的。根据文档,在调用select 之后,它会填写准备好读/写/等的集合。
今天故事的寓意是:阅读文档。
【讨论】: