這兩個事件其實是一個東西,分別對應poll和epoll,通常用來判斷對端是否關閉,但是當你對某個socket註冊POLLIN和POLLRDHUP(EPOLLIN和EPOLLRDHUP)時,在對端關閉時,對於poll來說會一直觸發POLLIN + POLLRDHUP事件,epoll也會觸發EPOLLIN + EPOLLRDHUP事件,是否一直觸發要看epoll是工作在LT模式下還是ET模式下。
所以,當我們使用POLLRDHUP(EPOLLRDHUP)事件來判斷對端是否關閉時,POLLRDHUP(EPOLLRDHUP)事件的處理應放在POLLIN(EPOLLIN)事件的前面,避免將對端關閉當做一次讀事件,而無法處理POLLRDHUP(EPOLLRDHUP)事件。