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