最近在寫一個socket程序。發現網上對於socket_listen里面的第二個參數的作用解釋的都是不是很清楚,所有就將自己的一些理解寫出來,讓大家參考下。
首先要明白三次握手的。當然能點進來的應該都知道什么是三次握手,這里就不廢話了。
當有多個客戶端一起請求的時候,服務端不可能來多少就處理多少,這樣如果並發太多,就會因為性能的因素發生擁塞,然后造成雪崩。所有就搞了一個隊列,先將請求放在隊列里面,一個個來。socket_listen里面的第二個參數backlog就是設置這個隊列的長度。如果將隊列長度設置成10,那么如果有20個請求一起過來,服務端就會先放10個請求進入這個隊列,因為長度只有10。然后其他的就直接拒絕。tcp協議這時候不會發送rst給客戶端,這樣的話客戶端就會重新發送SYN,以便能進入這個隊列。
如果三次握手完成了,就會將完成三次握手的請求取出來,放入另一個隊列中,這樣隊列就空出一個位置,其他重發SYN的請求就可以進入隊列中。
不過現在這個參數沒什么用了,因為SYN Cookie。有機會給大家講下SYN Cookie。
