【发布时间】:2011-11-24 11:55:07
【问题描述】:
我已经从 select() 获得了用于读取的信号套接字,但是 recv call() 没有到达数据,而是返回 -1 并带有 errno==EAGAIN。
我可以保证没有其他线程接触套接字。
我认为这种行为是不正确的。如果随后发生来自另一方的关闭,我可以预期 recv 的返回值 0(优雅关闭)或其他错误代码,但不是 EAGAIN,因为我认为这意味着数据将在未来到达。
我找到了一些关于问题here 的先前帖子,但没有解决方案。
这种行为在 Ubuntu Linux Oneric 或其他最后的 Linux 发行版上发生在我身上,然后来自链接发布的信息 here
3.0.0 内核或最新的 2.6.x 内核不会修复它
有人知道为什么会发生这种情况以及如何避免这种不受欢迎的行为吗?
【问题讨论】:
-
Sample code 会帮助perfect 这个问题。
标签: c sockets recv select-function