日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

OS / Linux / epoll 各种事件解析

發(fā)布時(shí)間:2024/10/14 linux 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OS / Linux / epoll 各种事件解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、監(jiān)聽(tīng)事件

設(shè)置事件為 EPOLLIN? 或者 EPOLLET | EPOLLIN

由于此 socket 只監(jiān)聽(tīng)有無(wú)連接,談不上寫和其他操作。故只有這兩類。(默認(rèn)是LT模式,即EPOLLLT |EPOLLIN)。

說(shuō)明:如果在這個(gè) socket上 也設(shè)置 EPOLLOUT 等,也不會(huì)出錯(cuò),只是這個(gè) socket 不會(huì)收到這樣的消息。

2、可讀事件。

EPOLLIN?????

3、可寫事件。

EPOLLOUT

4、客戶端正常關(guān)閉,client 端 close() 連接。

server 會(huì)報(bào)某個(gè) sockfd 可讀,即 EPOLLIN 來(lái)臨。然后 recv 一下 , 如果返回 0 再掉用 epoll_ctl 中的 EPOLL_CTL_DEL,同時(shí) close(sockfd) 。

有些系統(tǒng)會(huì)收到一個(gè) EPOLLRDHUP,當(dāng)然檢測(cè)這個(gè)是最好不過(guò)了。只可惜是有些系統(tǒng)不支持。上面的方法最保險(xiǎn),如果能加上對(duì) EPOLLRDHUP 的處理那就是萬(wàn)能的了。

最近測(cè)試 Ubuntu 18.04 系統(tǒng),當(dāng)對(duì)端執(zhí)行 close() 函數(shù)時(shí),server 收到了事件 8193,即:EPOLLHUP + EPOLLIN

5、客戶端異常關(guān)閉。

客戶端異常關(guān)閉,并不會(huì)通知服務(wù)器。正常關(guān)閉時(shí) read 返回 0 ,異常斷開(kāi)時(shí)檢測(cè)不到的。服務(wù)器再給一個(gè)已經(jīng)關(guān)閉的socket寫數(shù)據(jù)時(shí),會(huì)出錯(cuò),這時(shí)候,服務(wù)器才明白對(duì)方可能已經(jīng)異常斷開(kāi)了(讀也可以)。

Epoll中就是向已經(jīng)斷開(kāi)的 socket 寫或者讀,會(huì)發(fā)生 EPOLLERR,即表明已經(jīng)斷開(kāi)。

6、補(bǔ)充 EPOLLERR

當(dāng)客戶端的機(jī)器在發(fā)送“請(qǐng)求”前,就崩潰了(或者網(wǎng)絡(luò)斷掉了),則服務(wù)器一端是無(wú)從知曉的。按照你現(xiàn)在的這個(gè)“請(qǐng)求響應(yīng)方式”,無(wú)論是否使用 epoll,都必須要做超時(shí)檢查。因此,這個(gè)問(wèn)題與 epoll 無(wú)關(guān)。EPOLLERR 這種錯(cuò)誤必須是有動(dòng)作才能檢測(cè)出來(lái)。服務(wù)器不可能經(jīng)常的向客戶端寫一個(gè)東西,所以不能依照有沒(méi)有 EPOLLERR 來(lái)判斷客戶端是不是死了。因此,服務(wù)器中的超時(shí)檢查是很重要的,這也是以前服務(wù)器中作死后確認(rèn)的原因。

!!!服務(wù)器 中的超時(shí)檢查!!!很重要。

?

(SAW:Game Over!)

總結(jié)

以上是生活随笔為你收集整理的OS / Linux / epoll 各种事件解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。