我写了一个 epoll 客户端程序,测试的时候,epoll_wait 能正常触发 EPOLLERR 、EPOLLHUP 。然后代码不动,把 server 端换成公司服务器,即使抓包看收到 FIN 包和 RST 包,也收不到 EPOLLERR 。这个需要注意什么细节吗?
1
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 |
2
lestly OP @BingoXuan 是的,在我自己的测试 server 上,server 关闭,我的 epoll 客户端程序能收到 EPOLLIN ,并且我在测试 server 上直接 kill 掉,会发送 rst ,epoll 客户端也能收到 EPOLLERR 、EPOLLHUP 、EPOLLIN 、EPOLLOUT 。但是这一切当我把测试 server 换成公司的服务器就不同了,我只能正常在握手成功后收到 EPOLLOUT ,有数据接收收到 EPOLLIN 。无论怎样都收不到 EPOLLERR 和 EPOLLHUP 。我的 EPOLL 事件初始化是 stEvent.events = EPOLLOUT | EPOLLERR | EPOLLIN 。
|