listen函數中backlog的含義

TCP中服務器端調用listen函數監聽客戶端的連接,listen函數的第二個參數backlog到底是什麼意思呢?


可以這樣理解:

服務器端TCP內核模塊維護有2個隊列,我們稱之爲A,B吧。

客戶端向服務器端connect的時候,揮發送帶有SYN標誌的包(第一次握手),服務器收到客戶端發來的SYN時,向客戶端發送SYN ACK確認(第二次握手),此時TCP內核模塊把客戶端連接加入到A隊列中,然後服務器收到客戶端發來的ACK時(第三次握手),TCP內核模塊把客戶端連接從A隊列移到B隊列,連接完成,應用程序的accept會返回。

也就是說accept從B隊列中取出完成三次握手的連接。A隊列和B隊列的長度之和是backlog。當A,B隊列的長度之和大於backlog時,新連接將會被TCP內核拒絕。

所以,如果backlog過小,可能會出現accept速度跟不上,A。B隊列滿了,導致新的客戶端無法連接。


要注意的是:backlog對程序支持的連接數並無影響,backlog影響的只是還沒有被accept取出的連接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章