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)
在后续的读写时处理
网友评论