EPOLL

2022-11-08 14:23:33 +08:00
 lestly

我写了一个 epoll 客户端程序,测试的时候,epoll_wait 能正常触发 EPOLLERR 、EPOLLHUP 。然后代码不动,把 server 端换成公司服务器,即使抓包看收到 FIN 包和 RST 包,也收不到 EPOLLERR 。这个需要注意什么细节吗?

1579 次点击
所在节点    Linux
3 条回复
BingoXuan
2022-11-08 14:40:26 +08:00
正常 close 的话,我记得是 EPOLLIN 。读的是空数据

https://stackoverflow.com/questions/70905227/epoll-does-not-signal-an-event-when-socket-is-close
lestly
2022-11-08 15:05:36 +08:00
@BingoXuan 是的,在我自己的测试 server 上,server 关闭,我的 epoll 客户端程序能收到 EPOLLIN ,并且我在测试 server 上直接 kill 掉,会发送 rst ,epoll 客户端也能收到 EPOLLERR 、EPOLLHUP 、EPOLLIN 、EPOLLOUT 。但是这一切当我把测试 server 换成公司的服务器就不同了,我只能正常在握手成功后收到 EPOLLOUT ,有数据接收收到 EPOLLIN 。无论怎样都收不到 EPOLLERR 和 EPOLLHUP 。我的 EPOLL 事件初始化是 stEvent.events = EPOLLOUT | EPOLLERR | EPOLLIN 。
BingoXuan
2022-11-09 09:31:59 +08:00
@lestly
服务端被 kill 后,会触发 EPOLLERR 。你也直接把公司的 server kill 掉了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/893582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX