2012-04-03 15 views
3

私はman 2 listenを読んでいます。どのようなバックログの価値が必要ですか?

私はバックログ値が何であるかを理解していない、それがバックログ引数はどのように、数sockfdについての保留中の接続のキューが

右を育てることがあるに最大の長さを定義し

を語ります私は何が最高の価値を定義することができますか?

おかげ

+0

[ソケットリスンのバックログパラメータ、この値を決定する方法は?](http://stackoverflow.com/questions/114874/socket-listen-backlog-parameter-how-to-determine-this-value) – caf

答えて

6

は基本的に、どのようなlisten()バックログが影響することはあなたのアプリケーションが、すぐに彼らが来るようaccept() ING接続でない場合、着信接続は、最大キューすることができますどのように多くのです。それは、ほとんどのアプリケーションには特に重要ではありません。ほとんどのシステムで使用されている最大値は128です。これは一般に安全です。

+0

私のクライアントにエラーメッセージを送るために 'current_nb_client <5'ならば' accept() '(私の無限ループ内で)でテストすべきでしょうか?バックログとクライアント側でこれを処理する? – mathieug

+1

いいえ、それは必要ではありません - あなたが到着するとすぐに接続を受け入れている限り、待機中のバックログの長さは無関係です。あなたは必要に応じて*アクティブな接続をいくつでも持つことができます。 listenバックログは、完全に確立されていない接続にのみ影響します。 – duskwuff

+0

ああ、私はちょうど理解した!私は彼らがキューから消えないと思った。しかし、いいえ!それは保留中のキューです。それぞれをaccept()するだけで、キューから消えます。 – mathieug

1

これは、接続しようとするクライアント間の戦いです。受け入れ要求を待ち行列にプッシュし、受け入れスレッドはそれらを吸い取る。通常、スレッドは勝つ。私は通常32で設定しますが、通常は重要なパラメータではありません。

+0

私のクライアントにエラーメッセージを送るために 'current_nb_client <5'ならば私の' accept() '(私の無限ループ内)でテストすべきでしょうか?バックログとクライアント側でこれを処理する? – mathieug

+1

キューがいっぱいになると接続が拒否されますが、忘れてしまう可能性は低いです。多忙なネットワークに容易に追いつくことができるものは、たった今バースト的に多くの接続要求が来るが、全体的には今日のプロセッサー/メモリー/ OS /何が起こったかをカバーするために少しキューがなければならない。 –

+0

私は理解しています、ありがとう! – mathieug

関連する問題