假設我添加了一個 epoll 套接字,等待 EPOLLIN 和 EPOLLOUT 事件,如下所示:
struct epoll_event event;
event.events = EPOLLIN | EPOLLOUT;
epoll_ctl(epfd, EPOLL_CTL_ADD, socket, &event);
如果套接字變得可讀和可寫,我是否需要呼叫epoll_wait()兩次來接收這兩個事件,還是回傳一個epoll_event同時設定了兩個位域的事件?(假設epoll_wait()呼叫的maxevents值為 1。)
uj5u.com熱心網友回復:
的檔案epoll_wait()說:
該事件欄位是位掩碼,表示已發生了相應的打開檔案描述的事件。
復數“事件”意味著對于同一個描述符可以發生多個事件。
我相信maxevents引數epoll_wait()實際上指定了events陣列中的最大元素——如果單個 FD 有多個事件發生,它們都在一個元素中。
請注意,如果您使用級別觸發的事件(默認),EPOLLOUT幾乎總是會立即觸發,因為套接字始終準備好寫入,除非您寫入的內容太多以至于填滿內核的套接字緩沖區。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376055.html
上一篇:使用約束運行資料庫創建腳本
