我看到poll()系统调用即使在对等体关闭套接字之后也会返回POLLIN事件。我看到POLLIN和POLLERR都设置了。即使在read()调用返回-1之后,这种情况仍会继续发生。
我的逻辑仅在没有POLLIN的情况下处理POLLERR,以确保我在套接字断开之前读取已经到达的任何数据包。因此,我永远不会最终处理POLLERR,因为POLLIN始终处于设置状态。
为什么poll()在套接字错误后返回POLLIN和POLLERR? 我应该如何处理这种情况。
谢谢!
答案 0 :(得分:0)
这里真正的问题是为什么你仍然在套接字上进行轮询,以及为什么套接字仍然存在?如果从read()
得到-1,则应该关闭套接字并将其从轮询集中删除。如果你不这样做,POLLIN
将永远复发。