POLLRDHUP和EPOLLRDHUP事件的坑
这两个事件其实是一个东西,分别对应poll和epoll,通常用来判断对端是否关闭,但是当你对某个socket注册POLLIN和POLLRDHUP(EPOLLIN和EPOLLRDHUP)时,在对端关闭时,对于poll来说会一直触发POLLIN + POLLRDHUP事件,epoll也会触发EPOLLIN + EPOLLRDHUP事件,是否一直触发要看epoll是工作在LT模式下还是ET模式下。
所以,当我们使用POLLRDHUP(EPOLLRDHUP)事件来判断对端是否关闭时,POLLRDHUP(EPOLLRDHUP)事件的处理应放在POLLIN(EPOLLIN)事件的前面,避免将对端关闭当做一次读事件,而无法处理POLLRDHUP(EPOLLRDHUP)事件。