c - 当以 0 超时调用时,poll() ingores 传入数据

标签 c linux sockets

我的应用程序通过零超时调用 poll() 来检查 TCP 套接字中的传入数据。 99% 的时间它工作正常,当套接字上有数据时它设置 POLLIN 标志。然而,有时套接字上有数据(我在 wireshark 上看到消息),但 poll() 返回 0(超时)并且不设置 POLLIN 标志。当另一条消息到来时,它会在几秒钟后设置 POLLIN 标志。

这是正常行为吗? poll() 是否总是在超时前至少检查一次传入数据?

根据answers in another question , Linux 手册页对此不是很清楚。

最佳答案

我重现了在 poll() 中传递 10 毫秒超时的错误。经过进一步调查,我发现问题是由包装 unix 套接字 API 的库中的错误引起的。它从套接字加载数据到缓冲区,然后在消耗缓冲区中的所有字节之前轮询套接字以获取更多数据。无论如何,感谢您的评论。

因此,即使超时为 0,poll() 似乎也能正常工作。

关于c - 当以 0 超时调用时,poll() ingores 传入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338212/

相关文章:

c - 使用字符指针的问题

linux - 连接erlang客户端到oracle

java - 使用套接字获取网页

c - 尝试从 wininet HTTP 连接获取套接字

c - 作为结构的二维指针

c++ - 这是合法的 C++ 代码吗?

linux - Mongodb - 如何重启你刚刚在 Linux 中杀死的 mongodb?

linux - 如何在 unix 中一次授予 777 多个目录的权限?

c - 使用 select() 然后 read() 与阻塞 read() 循环

c - C-检查一个字母在数组中出现多少次的功能