2012-04-03 85 views
3

我讀了man 2 listen我應該使用什麼積壓值?

我不明白什麼是積壓價值,它說

積壓參數定義到了的sockfd掛起連接的隊列可能增長

右側的最大長度,如何我可以定義什麼是最好的價值?

感謝

+0

可能重複[套接字監聽backlog參數,如何確定此值?](http://stackoverflow.com/questions/114874/socket-listen-backlog-parameter-how-to-determine-this-value) – caf 2012-04-04 03:25:39

回答

6

基本上,什麼listen()積壓影響是多少傳入的連接可以排隊,如果你的應用程序不是accept()荷蘭國際集團聯繫,儘快爲他們進來,這不是大多數應用尤爲重要。大多數系統使用的最大值是128,傳遞通常是安全的。

+0

好的,如果'listen(sockfd,5)',我應該在我的'accept()'(在我的無限循環中)測試'current_nb_client <5',以便向我的客戶端發送錯誤消息,積壓和處理這在客戶端? – mathieug 2012-04-03 23:57:29

+1

不,這不是必要的 - 只要你一進來就接受連接,你的收聽積壓的長度就不相關。您可以根據需要獲得儘可能多的*活動*連接;收聽積壓隻影響尚未完全建立的連接。 – duskwuff 2012-04-04 00:26:42

+0

哦,我明白了!我以爲他們不會從隊列中消失。但不是!這是一個待處理的隊列,我只需要「接受()」,它們就會從隊列中消失。 – mathieug 2012-04-04 01:04:24

1

這是試圖連接的客戶端之間的戰鬥。將接受請求推送到隊列中,並將接受請求線程吸引到隊列中。通常,線程獲勝。我通常設置爲32,但通常不是一個重要的參數。

+0

好吧,如果我'聽(sockfd,5)',我應該在我的accept()中測試(在我的無限循環中)是否current_nb_client <5',以便向我的客戶端發送錯誤消息,或者我可以信任積壓和處理這在客戶端? – mathieug 2012-04-03 23:57:54

+1

如果隊列已滿,連接嘗試將被拒絕,但它不太可能發生,你應該忘記它。必須有一個隊列來覆蓋那些時候,當一個突發中出現大量連接請求時,但總體來說,今天的處理器/內存/操作系統/任何能夠很容易地跟上繁忙網絡。 – 2012-04-04 07:38:35

+0

我明白了,謝謝! – mathieug 2012-04-04 10:19:08