Epoll触发事件的类型(转载)
很Amazing,客服端關(guān)閉(close)居然不是觸發(fā)epoll的EPOLLHUP事件,結(jié)果找了老半天的錯(cuò)誤,記錄一下。為此警惕自己,不能相信直覺,一切從文檔出發(fā)。
以下內(nèi)容均為轉(zhuǎn)載(后面給出了原文的連接)
1、listen fd,有新連接請求,觸發(fā)EPOLLIN。
2、對端發(fā)送普通數(shù)據(jù),觸發(fā)EPOLLIN。
3、帶外數(shù)據(jù),只觸發(fā)EPOLLPRI。
4、對端正常關(guān)閉(程序里close(),shell下kill或ctr+c),觸發(fā)EPOLLIN和EPOLLRDHUP,但是不觸發(fā)EPOLLERR和EPOLLHUP。
??? 關(guān)于這點(diǎn),以前一直以為會(huì)觸發(fā)EPOLLERR或者EPOLLHUP
??? 再man epoll_ctl看下后兩個(gè)事件的說明,這兩個(gè)應(yīng)該是本端(server端)出錯(cuò)才觸發(fā)的。
5、對端異常斷開連接(只測了拔網(wǎng)線),沒觸發(fā)任何事件。
附man:
EPOLLIN
????????????? The associated file is available for read(2) operations.
EPOLLOUT
??????????????The associated file is available for write(2) operations.
EPOLLRDHUP
????????????? Stream? socket peer closed connection, or shut down writing half
????????????? of connection.? (This flag is especially useful for writing sim-
????????????? ple code to detect peer shutdown when using Edge Triggered moni-
????????????? toring.)
EPOLLPRI
????????????? There is urgent data available for read(2) operations.
EPOLLERR
??????????????Error condition happened? on? the? associated? file? descriptor.
????????????? epoll_wait(2)? will always wait for this event; it is not neces-
????????????? sary to set it in events.
EPOLLHUP
????????????? Hang? up?? happened?? on?? the?? associated?? file?? descriptor.
????????????? epoll_wait(2)? will always wait for this event; it is not neces-
????????????? sary to set it in events.
EPOLLET
????????????? Sets? the? Edge? Triggered? behavior? for? the? associated? file
????????????? descriptor.?? The default behavior for epoll is Level Triggered.
????????????? See epoll(7) for more detailed information about Edge and? Level
????????????? Triggered event distribution architectures.
EPOLLONESHOT (since Linux 2.6.2)
????????????? Sets? the? one-shot behavior for the associated file descriptor.
????????????? This means that after an event is pulled out with? epoll_wait(2)
????????????? the? associated? file? descriptor? is internally disabled and no
????????????? other events will be reported by the epoll interface.? The? user
????????????? must? call? epoll_ctl() with EPOLL_CTL_MOD to re-enable the file
????????????? descriptor with a new event mask.
原文:http://www.cppblog.com/yangsf5/archive/2009/03/12/76353.html
繼續(xù)深入學(xué)習(xí):http://www.ccvita.com/515.html
總結(jié)
以上是生活随笔為你收集整理的Epoll触发事件的类型(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以 rte_mempool_ops_ta
- 下一篇: python下批量下载专利-欧洲专利局