0

IOCPサーバーとクライアントのテストを行います。IOCPサーバーはクライアントの接続を受け入れ、クライアントからのデータパケットを受信するだけです。クライアントはサーバーに接続し、データパケットを無限ループでサーバーに送信します。

カウンターをセットしました。サーバーがクライアントを受け入れると増加し、ソケットが閉じられると減少します。

ここに質問があります:カウンターは32261に増加し、それ以上増加しません。サーバーはそれ以上の接続を受け入れることができません。GetLastError()は10055、WSAENOBUFを返します。

私のOSはWindowsXPで、メモリは4GBです。そして、私は非ページメモリをチェックしました。私の記憶は十分だと思います。

接続の最大数を制限するものは何ですか?最大接続数を増やすにはどうすればよいですか?

4

2 に答える 2

1

コードを見ずに問題の原因を特定するのは困難です。ページングされていないプールの枯渇である可能性は低いです。わずか760MBのRAMを搭載したWindowsServer2003でテストを実行し、IOCPベースのサーバーで70,000を超える同時接続を実現しました(ここを参照)。I / Oページのロック制限である可能性があります(ここを参照)。しかし、それはサーバーが接続を受け入れた後に何をしているかに依存します、それは読み取りを投稿していますか?もしそうなら、どのバッファサイズですか?私の知る限り、非ページプールの枯渇とI/Oページロック制限の両方でWSAENOBUFエラーが発生します。

最新のOSやサーバークラスのOSでテストを試しましたか?Vista以降では、ページングされていないプールがさらに利用可能になります(詳細はこちらを参照)...

于 2011-03-23T18:32:12.140 に答える
0

ページングできないメモリの制限に達しました。Push Frameworkを使用して IOCP でテストしていますか?

于 2011-03-23T09:49:17.060 に答える