• 个人对于epollhup的理解


      1.原因

        由于最近对于异步connect函数的测试,发现提前将一个套接字加入epoll监听队列会不断爆出epollhup事件

      2.示例

        ........

         iEpoll = epoll_create(1);

         iFd = socket(AF_INET, SOCK_STREAM, 0);

              stEvent.events = EPOLL_IN;

         stEvent.data.u32 = iFd;

        epoll_ctl(iEpoll, EPOLL_CTL_ADD, iFd, &stEvent);

        i = epoll_wait(iEpoll, astEvent, 1, -1);

        ...................

      3.调试

        在该tcp套接字创建之后,还未建链,也并未listen,说明这种情况下不会有任何事件上报,那么将这样的一个套接字加入该listen队列是错误的,但是epoll_ctl时加入却是成功的,很让人费解.即使后续的操作中有把该套接字connect或者listen,但是由于水平触发事件的原因,之前的事件未被处理,将导致这个hup事件一直上报.

      4.解决

        以上分析说明将一个不可能触发该事件发生发生的套接字加入epoll,将会导致hup事件的上报,所以接到该事件时,一个办法是将套接字移出epoll监听队列,另一个方法是,在connect操作之后或者在listen之后,再将该套接字加入epoll

  • 相关阅读:
    vue 无缝无限滚动横条实现
    小程序 recycle-view 个人demo
    js 笔记
    java整理的一些面试资料
    使用js获取浏览器地址栏里的参数
    java面试题
    sql中索引不会被用到的几种情况
    常用linux命令
    shiro登录成功之后跳转原路径
    springboot 整合 mongodb实现 批量更新数据
  • 原文地址:https://www.cnblogs.com/leo0000/p/6856608.html
Copyright © 2020-2023  润新知