2011-01-17 10 views
3

Winsockの関数listen(socket、backlog)には、保留中の接続のキューのサイズを指定するパラメータがあります。プログラムは、キューを最大サイズに設定するためにSOMAXCONNを渡す必要があります。listen()Windows版の最大キューサイズ

質問:Windowsの各バージョン(2000、XP、Vista、7)の最大キューサイズはどのくらいですか?

ありがとうございます!

参考:listen() on MSDN Library

+0

この質問をする理由:Webサーバーを設計しましたが、サーバーができるだけ早く応答しても、Windowsはいくつかの要求を破棄していました。これは、最新のWebブラウザが一度に5つ以上のリソースをフェッチし、SOMAXCONN定数が元のWinSock2ヘッダーで5にハードコードされていたためです。キューサイズが5より大きいサーバーでlisten()を呼び出すと、問題が解決しました。私はすべてのWindowsバージョンの潜在的なリスクを判断したかったのです。 – rjobidon

答えて

0

何あなたはこの答えを知っていれば達成したいと考えていますか?

接続受諾のパフォーマンスを向上させる方法はたくさんありますが、実際に待ち受けになっている接続の数を考慮する必要はありません。

リッスンバックログは、サーバーソフトウェアが新しい接続を受け入れることができる速度と、これらの新しい接続が到着する速度との間の短期間の不一致に対応するだけです。サーバが適切な速度で新しい接続を受け入れることを確実にするように努力することが理想的です。サーバが起動したときに重複した受け入れ番号を投稿し、接続が確立されたときにこれらを上書きすることが理想的です。

私のブログでは、herehereのこの種の話をしています。

+0

WinSock2ヘッダーファイルでSOMAXCONNが5に設定されています。したがって、キューのサイズは5台のクライアントしか受け付けられませんでした。私の問題は簡単です:現代のWebブラウザは、同時に5つ以上の画像を取得するためにWebページをロードする要求を同時に送信します。結果?一部の呼び出しが失敗し、ページにランダムに使用できない画像が含まれています。私は現代のWebブラウザに奉仕し、何人のクライアントが同時にページを要求できるかを知りたい。あなたの素晴らしいブログをありがとう! – rjobidon

+0

どこであなたのwinsockヘッダーのコピーを入手しましたか、SOMAXCONNは私の中で0x7fffffffとして定義されています。私は約100のリッスンバックログと重複したI/OとAcceptExを使用して、毎秒1000回の同時接続テストを実行しました。あなたが抱えている問題は起こるべきではありません。 –

+0

私は元のWinSock2ヘッダを持っています。 Microsoftからのヘルプファイルには、現在のところ、バックログが現在5に制限されていることが明示されています。不正な値(1未満または5以上)が最も近い正当な値に置き換えられました...これは15年前のことでした。 – rjobidon

0

私はそれがWindows 7上では200であると見てきましたが、OSに縛られているのか、ネットワーキングドライバなどが影響を受けるかどうかはわかりません。

これを実験的に判断するには、ポートをリッスンし、完了するまで受け入れることなくそのポートに多くの接続を行います(次に、どれだけのポートがあるかを確認します)。

レンのアドバイスを受け取り、IOCPでAcceptExを使用する場合、待っている接続のプールで事前に呼び出すことで、どれだけ大きなバックログを自分で判断できます。私はこの仕事をプール内の1,600の接続数で見たことがありますが、それには限界があるようです。これは、バックNTWS 4.0の5だった

7

http://support.microsoft.com/kb/127144

私はXPからそれにMicrosoftからの具体的な何かを見つけるのは難しいですが、それは、また、このようだったXPを信じています。 (少なくとも私のために、それは私が実際の答えを期待してここに終わった方法です)。

パンツのJavaテストでは、Windows 7 Proのデフォルトは50、制限は200となっています。FWIW。

なぜ誰かがこれについての仮定をもってこれに答える理由がわかりませんなぜ質問が尋ねられますか?実際の答えを知る正当な理由があります。

例えば、要求のバーストを受信する可能性があるソフトウェアがあります。オペレーティングシステムによる最大バックログが5の場合、できるだけ早くそれらを渡す場合でも、接続を拒否することがあります。また、200のバックログがこれを軽減します。このため、バックログの制限があるOSを使用しないようにOSのシステム要件を設定することができます。

関連する問題