socket listen參數中的backlog 的意義!


在做TCP 服務器時都會先有一步將綁定的IP 及端口進行監聽的操作,在監聽之后客戶端就可以進行連接了。一但有客戶進行連接內核會將它們放到另外一個接收隊列中,這個隊列中的連接將會由accept 來取走。如果沒有來取走,或者取的速度慢於連接的速度那么這個隊列就會滿。一但這個隊列滿了之后那么客戶端就無法連接到這個服務器上面了。而這個隊列的大小就是由listen 中的blcklog 參數經過一定的算法得到的。
 
服務器監聽時,在每次處理一個客戶端的連接時是需要一定時間的,這個時間非常的短(也許只有1ms 或者還不到),但這個時間還是存在的。而這個backlog 存在的意義就是:在這段時間里面除了第一個連接請求是正在進行處理以外,其他的連接請求都在請求隊列中等待,而如果超過了隊列的最大等待個數時,其他的請求將被忽略或者將不會被處理。
這個backlog 的值就是影響這個隊列的大小的。但是這個backlog 值的大小並非直接等於隊列的個數,隊列的實際大小根據操作系統的不同而不同。也許有的是這個值,有的是2 * backlog + 1 ,或者其他公式等等。
 
個人理解,僅供參考!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM