【发布时间】:2014-06-09 11:10:46
【问题描述】:
我阅读了libevent epoll中的代码,代码如下:
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;
}
据我了解,当 EPOLLERR 或 EPOLLHUP 发生时,应该关闭连接。但是在上面的代码中,当遇到 EPOLLHUP|EPOLLERR 时,事件掩码设置为 EV_READ | EV_WRITE。所以我的问题是:
- 是什么导致 EPOLLERR 和 EPOLLHUP 发生?
- 当EPOLLERR和EPOLLHUP发生时,程序在事件句柄函数中应该做什么?并请详细解释其背后的原因。
提前致谢!
【问题讨论】: