使用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)事件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章