TCP/IP Socket網(wǎng)絡(luò)編程心得

TCP/IP Socket網(wǎng)絡(luò)編程心得:

  1. ET模式下accept
  • 考慮這種情況:多個(gè)連接同時(shí)到達(dá),服務(wù)器的 TCP 就緒隊(duì)列瞬間積累多個(gè)就緒連接,由于是邊緣觸發(fā)模式,epoll 只會(huì)通知一次,accept 只處理一個(gè)連接,導(dǎo)致 TCP 就緒隊(duì)列中剩下的連接都得不到處理
  • 解決辦法是用 while 循環(huán)抱住 accept 調(diào)用,處理完 TCP 就緒隊(duì)列中的所有連接后再退出循環(huán)。如何知道是否處理完就緒隊(duì)列中的所有連接呢? accept 返回 -1 并且 errno 設(shè)置為 EAGAIN 就表示所有連接都處理完
  1. 對(duì)端或本端close的處理
  • 對(duì)端close, 本端繼續(xù)recv會(huì)返回0,send會(huì)返回-1
  • 本端close, 本端繼續(xù)recv會(huì)返回-1,send會(huì)返回-1,errno都是EPIPE
  • close(fd)之后,可以通過fd發(fā)送或接收數(shù)據(jù)嗎?如果調(diào)用了send或recv函數(shù)會(huì)報(bào) Broken pipe的錯(cuò)誤嗎?
  • 添加signal(SIGPIPE,SIG_IGN); 以免報(bào)Broken Pipe的錯(cuò)誤
  1. 使用ET和LT的區(qū)別
  • LT:水平觸發(fā),效率會(huì)低于ET觸發(fā),尤其在大并發(fā),大流量的情況下。但是LT對(duì)代碼編寫要求比較低,不容易出現(xiàn)問題。LT模式服務(wù)編寫上的表現(xiàn)是:只要有數(shù)據(jù)沒有被獲取,內(nèi)核就不斷通知你,因此不用擔(dān)心事件丟失的情況
  • ET:邊緣觸發(fā),效率非常高,在并發(fā),大流量的情況下,會(huì)比LT少很多epoll的系統(tǒng)調(diào)用,因此效率高。但是對(duì)編程要求高,需要細(xì)致的處理每個(gè)請(qǐng)求,否則容易發(fā)生丟失事件的情況
  • 采用LT模式下,如果accept調(diào)用有返回就可以馬上建立當(dāng)前這個(gè)連接了,再epoll_wait等待下次通知,和select一樣。 但是對(duì)于ET而言,如果accpet調(diào)用有返回,除了建立當(dāng)前這個(gè)連接外,不能馬上就epoll_wait還需要繼續(xù)循環(huán)accpet,直到返回-1,且errno==EAGAIN

-- 2018/05/26
-- 魔都

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原生API select intselect(int numfds, fd_set *readfds, fd_se...
    VD2012閱讀 1,537評(píng)論 0 1
  • 1.linux文件描述符 描述符從3開始以由小到大的順序編號(hào),0,1,2,分配給標(biāo)準(zhǔn)I/O用作標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和...
    leon4ever閱讀 1,577評(píng)論 0 2
  • 最近在看《UNIX網(wǎng)絡(luò)編程 卷1》和《FREEBSD操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》這兩本書,我重點(diǎn)關(guān)注了TCP協(xié)議相關(guān)的內(nèi)容...
    腩啵兔子閱讀 1,280評(píng)論 0 7
  • 本文摘抄自linux基礎(chǔ)編程 IO概念 Linux的內(nèi)核將所有外部設(shè)備都可以看做一個(gè)文件來操作。那么我們對(duì)與外部設(shè)...
    VD2012閱讀 1,067評(píng)論 0 2
  • 中國(guó)古語中有很玄妙的一句話,叫“有所為,有所不為”。如果把“有所為”看成“有”,把“有所不為”看成“無”,這不就是...
    來鄭坤茹閱讀 183評(píng)論 4 6

友情鏈接更多精彩內(nèi)容