int epoll_create(int size)
int epoll_ctl( int epfd, int op, int fd, struct epoll_event *event )
//由 epoll_create 生成的epoll專用的檔案描述符
//要進行的操作例如註冊事件,可能的取值epoll_ctl_add 註冊、epoll_ctl_mod 修//改、epoll_ctl_del 刪除
//關聯的檔案描述符
//指向epoll_event的指標
int epoll_wait( int epfd, struct epoll_event * events, int maxevents, int timeout )
//由epoll_create 生成的epoll專用的檔案描述符
//用於回傳代處理事件的陣列
//每次能處理的事件數
//等待i/o事件發生的超時值
//為0的時候表示馬上返回,為-1的時候表示一直等下去,直到有事件
//為任意正整數的時候表示等這麼長的時間,如果一直沒有事件
//一般如果網路主迴圈是單獨的執行緒的話,可以用-1來等,這樣可以
//保證一些效率
//如果是和主邏輯在同乙個執行緒的話,則可以用0來保證主迴圈的效率
typedef union epoll_data epoll_data_t;
struct epoll_event {
__uint32_t events; /* epoll events */
epoll_data_t data; /* user data variable */
結構體epoll_event 被用於註冊所感興趣的事件和回傳所發生待處理的事件.
其中epoll_data 聯合體用來儲存觸發事件的某個檔案描述符相關的資料.
例如乙個client連線到伺服器,伺服器通過呼叫accept函式可以得到於這個client對
應的socket檔案描述符,可以把這檔案描述符賦給epoll_data的fd欄位以便後面的讀
寫操作在這個檔案描述符上進行。epoll_event 結構體的events欄位是表示感興趣的
事件和被觸發的事件可能的取值為:
epollin :表示對應的檔案描述符可以讀;
epollout:表示對應的檔案描述符可以寫;
epollpri:表示對應的檔案描述符有緊急的資料可讀
epollerr:表示對應的檔案描述符發生錯誤;
epollhup:表示對應的檔案描述符被結束通話;
epollet:表示對應的檔案描述符有事件發生;
Linux事件觸發 epoll相關函式
在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。相比於select,epoll最大的好處在於它不會隨著監聽fd數目的增長而降低效率。因為在核心中的select實現中,它是採用輪詢來處理的,輪詢的fd數目越多,自然...
IO復用 epoll函式
由於poll 和select 的侷限,2.6核心以上引用了event poll機制 就是說的epoll 雖然比前2個實現複雜得多,epoll解決了它們共有的基本效能問題,並增加了新的特性。poll 和select 每次呼叫的時候,都需要所有被監聽的檔案的描述符。核心必須遍歷所有被監視的檔案描述符。當...
linux下的epoll函式
epoll是tcp ip網路程式設計的io服用方法之中一種優於select的函式,相比select,它有兩個優點 1.無需編寫以監視狀態變化為目的的針對所有檔案描述符的迴圈語句。2.呼叫對應於select函式的epoll wait函式時無需每次傳遞監視物件資訊。下面介紹epoll伺服器端實現中需要的...