WinSockの話

おはようございます

本日も過去のmixi日記から改変転載しています。だってmixiに書いても意味ないんだもの…。

Windows機でクライアントのテストをする場合の話

ダミークライアントを複数台立ち上げてサーバに接続する際、一台のWindows機で4000クライアントくらいから、connectが失敗する。

なにが原因?

TCP/IPを読んだことがある人は分かることだが、サーバと通信する時、サーバのIPとポート番号を指定するのだけれど、クライアントのIPとポート番号も、サーバに送信してあげないといけない。これがないと、サーバはクライアントに返信できないからだ。

登録ポート

このクライアントのポート番号はWindowsが自動に割り振ってくれる。この自動的に割り振ってくれるポート番号がデフォルトで、1024番から5000番なのだ。
で、1024番から5000番のポートを全て使っている状態だと、connectが失敗する。使えるポート番号がないのでしょうがない。(WSAGetLastError()をすると、WSAENOBUFSが取得される)

だから

デフォルトだと4000ほどコネクションをはると、ポート番号が尽きてしまうのだ。たかだか4000クライアントではテストにならない。なので、この5000番という最大ポート番号を引き上げると、4000以上のコネクションをはることが出来るようになる。

結局どうすればいいの?

引き上げる方法は以下を参照のこと
http://support.microsoft.com/kb/196271/ja