我的应用程序通过调用poll()以零超时来检查TCP套接字中的传入数据。 99%的时间工作正常,当有套接字上的数据设置POLLIN标志。 然而,有时在套接字上有数据(我在wireshark上看到这个消息),但是poll()返回0(超时)并且不设置POLLIN标志。 当另一条消息到达时,它会在几秒钟之后设置POLLIN标志。
这是正常的行为? poll()在超时之前总是检查传入数据吗?
根据另一个问题的答案 ,Linux的手册页不太清楚。
我在poll()中传递了超过10毫秒的超时错误。 经过进一步的调查,我发现这个问题是由一个包装unix socket API的库中的一个bug造成的。 它正在将数据从套接字加载到缓冲区中,然后在从缓冲区中消耗所有字节之前轮询套接字以获取更多数据。 无论如何感谢您的意见。
所以看来,poll()工作正常,即使超时为0。