我在同一个fd上一个接一个地跟2'选择'调用。两者都有diff fd_set,但两者只有一个fd int和相同的fd。(试图从同一个套接字读取)
问题是第二次选择超时。 我试图重新创建这个问题,但是在我的测试中,第二个选择几乎瞬间完成,即使超时= 0。
我很困惑。套接字是否在内核空间中有数据,因为第二个选择会立即通过。
答案 0 :(得分:1)
是的,套接字确实在内核空间中缓冲了传入数据 - 这是在第一次read()
返回后调用select()
时得到的内容,表示有可读的内容。如果您还没有阅读,那么当然另一个select()
将立即返回。
如果您 调用了read()
,那么它可能表示可用的数据比您阅读的数据还多,您应该继续阅读,直到您完成所有操作。如果对read()
的调用失败或在select
表示可读之后阻塞,或者您有理由相信在您已阅读的内容之后应该没有数据,则此处只有一个问题