1 つのプロセスで数千のクライアント接続を開始する必要があります。回避する必要がある主な制限は、ドライバーが ConnectEx をサポートしていないため、純粋な IOCP ソリューションを使用できないことです。
私が最初に考えたのは、接続を処理するためのスレッド プールです。各ハンドルは、単純な接続/選択セマンティクスを使用して最大 64 の接続を処理でき、接続されると IOCP を続行します。しかし、これは機能しません。select が実行されると、別のソケットを FD_SET に追加することはできません。したがって、ソケットをノンブロッキングに設定し、代わりにポーリングする必要があります。
最善の解決策は、最も単純なものかもしれません。スレッドごとに1 つの接続クライアント。接続レートを適切に維持できると仮定すると、プール内のスレッドの数は少なくなる可能性があります。
これは奇妙な状況です。ドライバーが ConnectEx をサポートするのが理想的ですが、(今のところ) サポートしていないため、可能な限り最善の方法で回避する必要があります。
別の方法はありますか?