WSADATA

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;

メンバ

wVersion

呼び出し側が使用すると見込まれるWindows Sockets使用のバージョン番号が格納されます。上位バイトはマイナーバージョン番号を、下位バイトはメジャーバージョン番号を表します。

wHighVersion

Ws2_32.dllがサポート可能なWindows Sockets仕様の最新バージョン番号が格納されます。上位バイトはマイナーバージョン番号を、下位バイトはメジャーバージョン番号を表します。

WSAStartup関数に渡されたwVersionRequestedパラメータで要求されるバージョン番号がWs2_32.dllでサポート可能なWindows Sockets仕様の最新バージョンである場合には、この値はwVersionメンバと同じになります。

szDescription

Ws2_32.dllによりコピーされる、Windows Sockets実装の説明を示すヌル終端ASCII文字列が格納されます。テキスト(最大256文字の長さ)は制御文字や書式文字を除く任意の文字を含んでいる可能性があります。アプリケーションがこのメンバを必要とすると思われるのは、ステータスメッセージに(場合により省略して)この文字列を表示することです。

szSystemStatus

Ws2_32.dllによりコピーされる、関連ステータスや設定情報を示すヌル終端ASCII文字列が格納されます。Ws2_32.dllは、情報がユーザやサポートスタッフに役立つ可能性がある場合にのみ、このパラメータを使用します。このメンバをszDescriptionパラメータの延長であるとみすべきではありません。

iMaxSockets

オープンすることができるソケットの最大数が格納されます。Windows Sockets 2以降ではこのメンバを無視するべきです。

iMaxSocketsメンバはWindows Sockets 1.1仕様との互換性のために残されていますが、新しいアプリケーションの開発でこのメンバを使用するべきではありません。すべての基本サービスプロバイダに対して単一の制限値を使用することが適切であるということはありません。Windows Socketsのアーキテクチャはバージョン2で複数プロバイダをサポートするように変更されており、WSADATA構造体は単一のベンダのスタックに適用されないようになっています。

iMaxUdpDg

最大データグラムメッセージサイズが格納されます。Windows Sockets 2以降ではこのメンバは無視されます。

iMaxUdpDgメンバはWindows Sockets 1.1仕様との互換性のために残されていますが、新しいアプリケーションの開発でこのメンバを使用するべきではありません。Windows Socketsのアーキテクチャはバージョン2で複数プロバイダをサポートするように変更されており、WSADATA構造体は単一のベンダのスタックに適用されないようになっています。特定のWindows Socketsサービスプロバイダとソケットタイプに固有の実際の最大メッセージサイズを取得するには、アプリケーションはソケットが作成された後にgetsockoptを使用してSO_MAX_MSG_SIZEオプションの値を取得すべきです。

lpVendorInfo

ベンダ固有情報へのポインタが格納されます。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_SIZEiMaxUdpDgメンバの代わりとなる)および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