epoll觸發事件的分析

2021-08-08 15:04:41 字數 773 閱讀 9771

我們知道,可以將套接字放入到epoll中監聽,當套接字上有事件發生時,epoll就會通知我們。epoll機制可以監聽套接字上的以下6種事件:

那麼,什麼情況下會在套接字上觸發以上6種事件呢?當我們監聽套接字上的epollin + epollrdhup事件時,總結如下:

綜上,可能出現的事件組合為:

1. epollin:

可讀2. epollout:

可寫3. epollin + epollrdhup:

只可能是兩種情況:

一是收到對端發來的fin報文(可能是對端close套接字或shutdown寫);

二是本端showdown讀。

注意,這兩個訊號會一直留存在epoll中,即在水平觸發模式下,會不斷觸發epollin+epollrdhup事件;邊沿觸發模式下,如果該套接字上後續再有其他事件觸發,這兩個事件也會一併觸發。

4. epollin+epollhup+epollrdhup:本端shutdown讀寫。為避免套接字上觸發該種組合的事件,在shutdown讀寫前,應該將套接字從epoll中移除。

5. epollin+epollrdhup+epollhup+epollerr

收到對端發來的rst報文。通常是對端已經close了套接字或shutdown了讀寫,本端還往對端傳送資料,此時會收到對端發來的rst報文。

可以認為,epollrdhup事件不會單獨出現,它總是和epollin一起出現。如果我們在shutdown讀寫前將套接字從epoll中移除,可以認為epollerr 總是和epollhup一起出現,它倆不會單獨出現。

Linux事件觸發 epoll相關函式

在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。相比於select,epoll最大的好處在於它不會隨著監聽fd數目的增長而降低效率。因為在核心中的select實現中,它是採用輪詢來處理的,輪詢的fd數目越多,自然...

epoll邊緣觸發 Epoll筆記

下圖為epoll的流程圖 epoll一共兩種模式,水平觸發 lt 和邊緣觸發 et 主要的區別在於對讀,寫資料的處理 lt初始化 epoll ctrl connect socket,epollin,add lt讀 void lt handle read if n 0 errno eagain lt寫...

epoll的邊緣觸發

level triggered 水平觸發 當被監控的檔案描述符上有可讀寫事件發生時,epoll wait 會通知處理程式去讀寫。如果這次沒有把資料一次性全部讀寫完 如讀寫緩衝區太小 那麼下次呼叫 epoll wait 時,它還會通知你在上沒讀寫完的檔案描述符上繼續讀寫,當然如果你一直不去讀寫,它會一...