關於linux下socket的串連隊列backlog的分析

來源:互聯網
上載者:User

標籤:socket

    linux在對socket的串連隊列的定義處理上個人覺得是有點坑爹的,閑話少說,直接開講。


建立socket串連的過程:

    1.client發syn請求給server 

    2.server收到後把請求存放在SYN queue裡,這個半串連隊列的最大值是系統參數               tcp_max_syn_backlog定義的

    3.存放在半串連隊列後發送syn+ack給client,client收到後再發syn+ack給server完成三向交握,然後server把串連存放在accept queue ,這個隊列長度就是程式裡調用socket的時候定義的backlog定義大小。

    4.應用程式通過調用accept()到accept queue裡擷取串連。

    坑爹的特性來了!注意!

    當accept queue滿了會怎麼樣?

    !!注意!如果accept隊列滿了,linux會出現一個異常處理,去判斷tcp_abort_on_overflow系統參數是否為1,如果為1 ,則會發出拒絕用戶端的終止訊息並中斷連線。但是如果這個參數是0,那就坑爹了!,對於溢出隊列的串連,linux不會去管它,會繼續正常建立串連,但是在accept queue裡沒有,那就意味著你的程式用accept()函數無法取的串連!這是多麼的坑爹啊!!!根本查不出原因好麼!!!各種被誤導好麼!!!尼瑪linux啊!!

本文出自 “北京的大連人” 部落格,謝絕轉載!

關於linux下socket的串連隊列backlog的分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.