即使在同伴挂断后,poll()还能返回POLLIN事件吗?

时间:2017-05-07 00:49:13

标签: c linux multithreading sockets poll-syscall

我看到poll()系统调用即使在对等体关闭套接字之后也会返回POLLIN事件。我看到POLLIN和POLLERR都设置了。即使在read()调用返回-1之后,这种情况仍会继续发生。

我的逻辑仅在没有POLLIN的情况下处理POLLERR,以确保我在套接字断开之前读取已经到达的任何数据包。因此,我永远不会最终处理POLLERR,因为POLLIN始终处于设置状态。

为什么poll()在套接字错误后返回POLLIN和POLLERR? 我应该如何处理这种情况。

谢谢!

1 个答案:

答案 0 :(得分:0)

这里真正的问题是为什么你仍然在套接字上进行轮询,以及为什么套接字仍然存在?如果从read()得到-1,则应该关闭套接字并将其从轮询集中删除。如果你不这样做,POLLIN将永远复发。