代替ライブラリ:
boost asioの使用を検討する必要があります。これは、実行しなければならない多くのタスクを簡素化するクロス プラットフォームのネットワーク ライブラリです。
探しているソース コードの例は、ここで見つけることができます。
64 制限について:
優れた設計で経験するハード 64 接続制限はありません。基本的に、ある種のスレッド モデルを使用する場合、この制限は発生しません。
聞いた制限に関する情報を次に示します。
4.9 - 「64 ソケット」の制限とは?
64 ソケットには 2 つの制限があります。
Win32 イベント メカニズム (WaitForMultipleObjects() など) は、一度に 64 個のイベント オブジェクトしか待機できません。Winsock 2 は、Win32 のイベント メカニズムを使用してソケット上のイベントを待機できる WSAEventSelect() 関数を提供します。Win32 のイベント メカニズムを使用するため、一度に 64 ソケットのイベントしか待機できません。一度に 64 を超える Winsock イベント オブジェクトを待機する場合は、複数のスレッドを使用して、それぞれが 64 を超えるソケットを待機しないようにする必要があります。
また、select() 関数は、特定の状況で一度に 64 個のソケットを待機するように制限されています。winsock.h で定義されている FD_SETSIZE 定数は、select() に渡す fd_set 構造体のサイズを決定します。デフォルトでは 64 に定義されています。winsock.h を #include する前に、この定数をより高い値に定義できます。これにより、デフォルト値が上書きされます。残念ながら、少なくとも 1 つの Microsoft 以外の Winsock スタックと一部のレイヤード サービス プロバイダーは、デフォルトの 64 を想定しています。大きな fd_sets では、64 番目を超えるソケットは無視されます。
テスト プログラムを作成して、サポートする予定のシステムでこれを試し、それらが制限されていないかどうかを確認できます。そうであれば、イベント オブジェクトの場合と同様に、スレッドを使用してこれを回避できます。
ソース