0

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

我的逻辑仅在没有 POLLIN 时才处理 POLLERR,以确保我读取了在套接字断开连接之前已经到达的任何数据包。结果,我永远不会处理 POLLERR,因为 POLLIN 总是被设置。

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

谢谢!

4

1 回答 1

0

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

于 2017-05-07T00:58:09.947 回答