網絡編程11——epoll實現多路IO的三個基本函數:epoll_create、epoll_ctl、epoll_wait

要用epoll實現多路IO轉接需要用的epoll_create()epoll_ctl()epoll_wait()三個函數

一、epoll_create(int size):創建一棵監聽紅黑樹

本質是一棵平衡二叉樹(紅黑樹)
在這裏插入圖片描述
參數size:創建紅黑樹的監聽節點數量(但這個數僅供內核參考
返回值:成功指向新創建的紅黑樹的根節點fd;失敗返回-1和errno
在這裏插入圖片描述

二、epoll_ctrl:操作監聽紅黑樹

在這裏插入圖片描述
參數1:epfd是epoll_create的函數返回值,就是圖中的那個根節點
參數2:op 對該監聽紅黑樹所做的操作(添加、修改、刪除)
EPOLL_CTL_ADD:添加fd到監聽紅黑樹上
EPOLL_CTL_MOD:修改fd在監聽紅黑樹上的監聽事件
EPOLL_CTL_DEL:將一個fd從監聽紅黑樹上摘下(取消監聽)
參數3:fd 待監聽的fd
參數4:event 本質是struct epoll_event的一個結構體,有兩個成員分別是①events:有EPLOOIN、EPOLLOUT、EPOLLERR;另一個成員②data是一個聯合體,裏有fd對應監聽事件的fd、一個泛型指針void*ptr、另外兩個unit32_t類型和unit64_t類型的變量不用

epoll_ctl函數返回值:成功0,失敗-1並errno
在這裏插入圖片描述

三、int epoll_wait() 阻塞監聽

在這裏插入圖片描述
參數1:epfd,是epoll_create()函數的返回值
參數2:events, 是一個數組,是一個傳出參數,傳出滿足監聽條件的fd結構體,就不用像前兩個select和poll一樣要去輪詢找滿足事件啦
在這裏插入圖片描述
參數3:maxevents, 數組元素的總個數,1024
參數4:timeout ,設-1爲阻塞,設0表示非阻塞立即返回,設>0則爲指定的毫秒數

int epoll_wait()的返回值:大於0表示返回滿足監聽的總個數,可以用作循環上限;返回0表示沒有fd滿足監聽事件;返回-1表示失敗,並errno

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