美文网首页
epoll的事件

epoll的事件

作者: 突击手平头哥 | 来源:发表于2021-02-28 11:18 被阅读0次

epoll事件

这里主要说明epoll事件的触发情况,epoll具体怎么使用后续再补充吧

epoll_wait处理

返回值

  • 如果运行正常,返回触发对应事件的文件描述符个数
  • 如果超时后无事件触发,返回0
  • 如果出错,返回-1并且errno被设置上指定的错误值

errno错误处理

  • EINTR: 系统中断导致的异常返回,忽略继续调用epoll_wait即可

事件

  • EPOLLIN: 有新的连接进入或者有输入进入可读;低版本Linux中对端正常断开连接也会触发该事件,需要处理recv结果为0的情况
  • EPOLLERR: 在我方进行读写时触发的,给已关闭的套接字写时就会触发,触发后该套接字可以关闭不再处理了;该事件无需设置,自动触发
  • EPOLLOUT: 可以写数据了
  • EPOLLHUP: 对端连接关闭时触发,不需要主动设置
  • EPOLLPRI: 带外数据到来,带外数据是用来告知对端本端发生的重要事件,有用到就设置没用到就不需要考虑
  • EPOLLRDHUP: 高版本的Linux对端连接断开,会触发该事件;需要主动设置
if (what & (EPOLLHUP|EPOLLERR)) {
            ev = EV_READ | EV_WRITE;
        } else {
            if (what & EPOLLIN)
                ev |= EV_READ;
            if (what & EPOLLOUT)
                ev |= EV_WRITE;
            if (what & EPOLLRDHUP)
                ev |= EV_CLOSED;
        }

  如上是libevent中的处理,可以根据事件直接进行处理,也可以类似(EPOLLHUP|EPOLLERR)在后续的读写时处理

\color{red}{在实际编程中,除了正常业务外,剩余的就是处理各种异常场景;使用epoll时套接字关闭的各种事件都需要考虑到,正常还需要加入心跳检测}

相关文章

网友评论

      本文标题:epoll的事件

      本文链接:https://www.haomeiwen.com/subject/lqhgfltx.html