2

TCP IP 接続を使用して c++ で書かれた winsock IOCP サーバーがあります。クライアント シミュレーターでループバック アドレスを使用して、このサーバーをローカルでテストしました。私は 60,000 人以上のクライアントを簡単に獲得することができました。私が抱えている問題は、私の家でサーバーを実行し、友人の家でクライアントシミュレーターを実行するときです。約 3700 の接続に到達するまではすべて正常に動作します。その後、connect() へのすべての呼び出しがクライアント側から失敗し、10060 が返されます (これは winsock のタイムアウト エラーです)。昨夜、この数は 3700 でしたが、以前は約 300 でした。また、1000 近くも見ました。しかし、その数が何であれ、シミュレートしようとするたびに、その数のすぐ近く (10 程度以内) で失敗します。 .

どちらのコンピューターも Windows 7 Ultimate を使用しています。また、TCPIP レジストリ設定 MaxTcpConnections を約 1600 万に変更しました。また、MaxUserPort 設定をデフォルトの 5000 から 65k に変更しました。イベント ビューアに有用な情報が表示されません。また、リソース モニターも確認しましたが、ネットワーク使用率が 1% に達していません。CPU 使用率もほぼ 0% です。

ISP との電話を切ったばかりで、彼らは私たちを制限していないと言っていますが、その人は少し確信が持てず、30 分間の保留時間の後、結局電話を切りました...

この問題を解決するためにあらゆることを試みていますが、解決策が見つかりません。誰かがこの問題について私たちに手を差し伸べてくれたら、とてもうれしいです。

PS両方のコンピューターは、同じベライゾンルーターを備えたベライゾンFIOS上にあります。もう 1 つの注意点として、サーバーは AcceptEx ではなく WSAAccept を使用しています。ただし、クライアント シミュレーターは何秒にもわたって接続を試みているため、接続がバックログされていないことは確かです。クライアント シミュレーターが接続する速度を変更しようとしましたが、設定されている速度に関係なく、毎回ほぼ同じ速度で失敗します。

更新 ネットワーク A 上の 2 つの別個のクライアント (2 つの別個のマシン上) をシミュレートしました。サーバーはネットワーク B で実行されていました。各クライアントは、半分 (約 1600) の接続しかサーバーに接続できませんでした。最初は 1,000 未満のポートを使用していましたが、これは 50,000 を超えるポートに変更されました。両方のマシンのルーター ログには何も表示されませんでした。どちらも Actiontec MI424WR verizon FIOS ルーターを使用しています。これにより、問題はクライアント コードにあるとは思えません。サーバーはエラーをスローせず、予期しない動作もありません。これは ISP/ルーターの問題でしょうか?

更新 解決策が見つかりました。私たちが使用していた Verizon ルーター (MI424WR リビジョン C) は、3700 を超える接続を処理できません。別のネットワーク セットでこれをテストしました。助けてくれてありがとう!

ありがとう - リック

4

1 に答える 1