我已经从 select() 中获得了用于读取的信号套接字,但是 recv call() 没有到达任何数据,而是返回 -1 并带有 errno==EAGAIN。
我可以允许没有其他线程接触套接字。
我认为这种行为是不正确的。如果发生来自另一方的后续关闭,我可以期望来自 recv 的返回值 0(优雅关闭)或其他错误代码,但不是 EAGAIN,因为我认为这意味着数据将在未来到达。
我在这里找到了一些关于该问题的先前线程,但没有解决方案。
这种行为在 Ubuntu Linux Oneric 或其他最后的 Linux 发行版上发生在我身上,然后来自此处发布的链接的信息
对于 3.0.0 内核或最新的 2.6.x,它将在内核中修复是不正确的
有谁知道它为什么会发生以及如何避免这种不需要的行为?