1. 程式人生 > >有關epoll讀寫監聽的處理

有關epoll讀寫監聽的處理

epoll使用的資料網上一大把,EPOLLIN(讀)監聽事件的型別,大家一般使用起來一般沒有什麼疑問,無非是監聽某個埠,一旦客戶端連線有資料傳送,它馬上通知服務端有資料,一般用一個回撥的讀函式,從這個相關的socket介面讀取資料就行了。但是有關EPOLLOUT(寫)監聽的使用,網上的資料卻講得不夠明白,理解起來有點麻煩。因為監聽一般都是被動操作,客戶端有資料上來需要讀寫(被動的讀操作,EPOLIN監聽事件很好理解,但是伺服器給客戶傳送資料是個主動的操作,寫操作如何監聽呢?

  如果將客戶端的socket介面都設定成 EPOLLIN | EPOLLOUT(讀,寫)兩個操作都設定,那麼這個寫操作會一直監聽,有點影響效率。經過查閱大量資料,我終於明白了EPOLLOUT(寫)監聽的使用場,一般說明主要有以下三種使用場景:

  1: 對客戶端socket只使用EPOLLIN(讀)監聽,不監聽EPOLLOUT(寫),寫操作一般使用socket的send操作

  2:客戶端的socket初始化為EPOLLIN(讀)監聽,有資料需要傳送時,對客戶端的socket修改為EPOLLOUT(寫)操作,這時EPOLL機制會回調發送資料的函式,傳送完資料之後,再將客戶端的socket修改為EPOLL(讀)監聽

 3:對客戶端socket使用EPOLLIN 和 EPOLLOUT兩種操作,這樣每一輪epoll_wait迴圈都會回撥讀,寫函式,這種方式效率不是很好