美文网首页
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