クライアントの接続を1つのプロセスで開始する必要があります。回避する必要のある重要な制限はConnectExをサポートしていないため、純粋なIOCP溶液。ConnectexなしのWindowsで非ブロッキングソケット接続
私の最初の考えは、各ハンドルは、プレーン接続を使用して64個の接続を扱うことができる場所/セマンティクスを選択し、接続を処理するスレッドプールで、一度接続がIOCPを続行します。 しかし、これは動作しません。 selectが実行されると、別のソケットをFD_SETに追加できません。だから私は非ブロックにソケットを設定し、それらを代わりにポーリングする必要があります。
最も簡単な解決策は最も簡単な方法です。 1 接続スレッドごとのクライアント。私が接続速度を合理的に保つことができると仮定すると、プール内のスレッドの数は少なくなる可能性があります。
それは理想的なドライバがでConnectExをサポートする、奇妙な状況ですが、それは(今のところ)ないと私は、可能な最善の方法でそれを回避する必要があります。
別の方法がありますか?それはあなたのケースでコストがかかるかもしれませんが
WSAAsyncSelectとWSAEventSelect両方が便利に聞こえます。私は、接続ごとに1つのスレッドでオフを開始し、その後、これら二つのいずれかを使用して64のグループに接続をプールすると思います。ありがとうございました。 – hplbsh
私はWSAAsyncSelectがWindowsメッセージを使用していることに気付かなかった。厄介ですが、潜在的に非常に有用です。 – hplbsh