V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
lestly
V2EX  ›  Linux

EPOLL

  •  
  •   lestly · 2022-11-08 14:23:33 +08:00 · 1570 次点击
    这是一个创建于 764 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    BingoXuan
        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
    lestly
        2
    lestly  
    OP
       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
        3
    BingoXuan  
       2022-11-09 09:31:59 +08:00
    @lestly
    服务端被 kill 后,会触发 EPOLLERR 。你也直接把公司的 server kill 掉了?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5536 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:31 · PVG 10:31 · LAX 18:31 · JFK 21:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.