Windows でのソケット数上限

Linux だと、ソケット数の上限がデフォルトで 1024 とかに設定されていたと記憶しているのですが、Windows だとどうなんだろう、と。
以下のレジストリに書いてあるみたい。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort

デフォルトでは、5000 …らしいのですが、自分の環境ではこのレジストリ存在しませんでした。。。
書いてない場合、デフォルトで 5000 が使用されるらしいので、まぁ、問題なさそうですが。

注意点として、select 等の非同期イベントを使用する場合は、64 個のソケットしか待てないようです。

なお、WinSock 使用時に用いられる、WSADATA という構造体の中に、iMaxSockets ちゅーものがあります。

typedef struct WSAData {
        WORD                    wVersion;
        WORD                    wHighVersion;
        char                    szDescription[WSADESCRIPTION_LEN+1];
        char                    szSystemStatus[WSASYS_STATUS_LEN+1];
        unsigned short          iMaxSockets; // ←コレ
        unsigned short          iMaxUdpDg;
        char FAR *              lpVendorInfo;
} WSADATA, FAR * LPWSADATA;

お、これでソケットの最大数わかるじゃん!と思ったのですが、
どうやらこの値、WinSock 1.X のみで有効なようです。。。残念。

CString strMax;
WSADATA wsaData;
if (::WSAStartup(MAKEWORD(1, 0), &wsaData) != 0) {
  ::MessageBox(NULL, _T("Failed to WSAStartup"), _T("警告"), MB_OK);
  return FALSE;
}
strMax.Format(_T("ソケット数上限: [%d]"), wsaData.iMaxSockets);
::MessageBox(NULL, strMax, _T("警告"), MB_OK); // ソケット数上限: [32767]
if (::WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) {
	::MessageBox(NULL, _T("Failed to WSAStartup"), _T("警告"), MB_OK);
	return FALSE;
}
strMax.Format(_T("ソケット数上限: [%d]"), wsaData.iMaxSockets);
::MessageBox(NULL, strMax, _T("警告"), MB_OK); // ソケット数上限: [0]

32767 って表示されたことがそこはかとなく気持ち悪いです。。。
そこは、5000 じゃないのん?WinSock 2.0 でやるんで関係ないけど。。。