WSADATA構造体は、Windows Sockets仕様に関する情報を格納するために使用されます。
#define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 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 *lpVendorInfo; } STARTUPINFO, *LPSTARTUPINFO;
呼び出し側が使用すると見込まれるWindows Sockets使用のバージョン番号が格納されます。上位バイトはマイナーバージョン番号を、下位バイトはメジャーバージョン番号を表します。
Ws2_32.dllがサポート可能なWindows Sockets仕様の最新バージョン番号が格納されます。上位バイトはマイナーバージョン番号を、下位バイトはメジャーバージョン番号を表します。
WSAStartup関数に渡されたwVersionRequestedパラメータで要求されるバージョン番号がWs2_32.dllでサポート可能なWindows Sockets仕様の最新バージョンである場合には、この値はwVersionメンバと同じになります。
Ws2_32.dllによりコピーされる、Windows Sockets実装の説明を示すヌル終端ASCII文字列が格納されます。テキスト(最大256文字の長さ)は制御文字や書式文字を除く任意の文字を含んでいる可能性があります。アプリケーションがこのメンバを必要とすると思われるのは、ステータスメッセージに(場合により省略して)この文字列を表示することです。
Ws2_32.dllによりコピーされる、関連ステータスや設定情報を示すヌル終端ASCII文字列が格納されます。Ws2_32.dllは、情報がユーザやサポートスタッフに役立つ可能性がある場合にのみ、このパラメータを使用します。このメンバをszDescriptionパラメータの延長であるとみすべきではありません。
オープンすることができるソケットの最大数が格納されます。Windows Sockets 2以降ではこのメンバを無視するべきです。
iMaxSocketsメンバはWindows Sockets 1.1仕様との互換性のために残されていますが、新しいアプリケーションの開発でこのメンバを使用するべきではありません。すべての基本サービスプロバイダに対して単一の制限値を使用することが適切であるということはありません。Windows Socketsのアーキテクチャはバージョン2で複数プロバイダをサポートするように変更されており、WSADATA構造体は単一のベンダのスタックに適用されないようになっています。
最大データグラムメッセージサイズが格納されます。Windows Sockets 2以降ではこのメンバは無視されます。
iMaxUdpDgメンバはWindows Sockets 1.1仕様との互換性のために残されていますが、新しいアプリケーションの開発でこのメンバを使用するべきではありません。Windows Socketsのアーキテクチャはバージョン2で複数プロバイダをサポートするように変更されており、WSADATA構造体は単一のベンダのスタックに適用されないようになっています。特定のWindows Socketsサービスプロバイダとソケットタイプに固有の実際の最大メッセージサイズを取得するには、アプリケーションはソケットが作成された後にgetsockoptを使用してSO_MAX_MSG_SIZEオプションの値を取得すべきです。
ベンダ固有情報へのポインタが格納されます。Windows Sockets 2以降ではこのメンバを無視するべきです。
lpVendorInfoメンバはWindows Sockets 1.1仕様との互換性のために残されていますが、新しいアプリケーションの開発でこのメンバを使用するべきではありません。Windows Socketsのアーキテクチャはバージョン2で複数プロバイダをサポートするように変更されており、WSADATA構造体は単一のベンダのスタックに適用されないようになっています。アプリケーションがベンダ固有の設定情報にアクセスする必要がある場合は、getsockoptを使用してベンダ固有情報に対するPVD_CONFIGオプションの値を取得すべきです。
WSAStartup関数はプロセスによるWindows Sockets DLLの使用を開始します。WSAStartup関数はlpWSADataパラメータで指定されたポインタにWSADATA構造体を返します。
WSADATA構造体のwHighVersionメンバに返されるWindows Sockets仕様の現在のバージョンは2.2です。この値はメジャーバージョン番号が下位バイトに、マイナーバージョン番号が上位バイトになるようにエンコードされて格納されます。現在のWinsock DLL (Ws_32.dll) のこのバージョンは以下のいずれかのバージョンのWindows Sockets仕様を要求するアプリケーションをサポートしています。
アプリケーションが要求したバージョンに応じて、上記のバージョンのうちの1つが、メジャーバージョン番号が下位バイトに、マイナーバージョン番号が上位バイトになるようにエンコードされて、WSADATA構造体のwVersionメンバに返されます。
WSAStartup呼び出し成功後のwVersionメンバのバージョン番号が2.0以上である場合には、アプリケーションはWSADATA構造体のiMaxsockets, iMaxUdpDg, lpVendorInfoメンバを無視すべきです。これは、Windows Socketsのアーキテクチャがバージョン2で複数プロバイダをサポートするように変更されており、WSADATAは単一のベンダのスタックに適用されないためです。プロバイダ固有の情報を提供するために2つの新しいソケットオプションSO_MAX_MSG_SIZE(iMaxUdpDgメンバの代わりとなる)およびPVD_CONFIG(その他の任意のプロバイダ固有設定を含めることができるようにする)が導入されています。
Windows 95 以降 / Windows NT 3.51 以降
HSP 変数 | メンバ | |||
---|---|---|---|---|
メンバ名 | オフセット | サイズ | ||
wsadata(0) | 下位ワード | wVersion | 0 | 2 |
上位ワード | wHighVersion | 2 | 2 | |
wsadata(1) | szDescription | 4 | 257 | |
… | ||||
wsadata(65) | 1バイト目 | |||
2バイト目 | szSystemStatus | 261 | 129 | |
3バイト目 | ||||
4バイト目 | ||||
… | ||||
wsadata(97) | 下位ワード | |||
上位ワード | iMaxSockets | 390 | 2 | |
wsadata(98) | 下位ワード | iMaxUdpDg | 392 | 2 |
上位ワード | 未使用(アライメント処理) | 394 | 2 | |
wsadata(99) | lpVendorInfo | 396 | 4 |