アプリケーションまたはDLLは、Winsock2使用時にWSAStartup関数を最初に呼び出しましょう。
それはアプリケーションまたはDLLが要求するウィンドウズ・ソケッツ・バージョンを指定するのを許可します、
そして、特定のウィンドウズ・ソケッツ実装の詳細を調べます。
そのアプリケーションまたはDLLは、WSAStartup呼び出しが成功した後に限り、さらにウィンドウズ・ソケッツ関数を発行する事が可能になります。
ウィンドウズ・ソケッツ実装とアプリケーションを将来に置いても対応する為に、最新バージョンからの機能差異を持つ事が出来ます、
ネゴシエーションはWSAStartupで行われます。
WSAStartupとWS2_32.DLLの呼び出し者は、対応する事が出来る中で最も高いバージョンを示します、
そして、各自が他の最も高いバージョンが許容できることを確認します。
WSAStartupへエントリィ時に、
WS2_32.DLLはアプリケーションで要求されるバージョンを調べます。
このバージョンがDLLによってサポートされる最も低いバージョンと以上ならば、
呼び出しは成功します、そして、DLLはwHighVersionで対応する最大バージョンとwVersionのその高いバージョンとwVersionRequestedの最小限を返します。
WS2_32.DLLは呼び出し者にとってWSADATA構造体のwVersionパラメタが受け入れられないならアプリケーションがwVersionを使用すると仮定する、
WSACleanupを呼び出し、別のWS2_32.DLLを調べる、または、初期化を失敗します。
高いバージョン番号にネゴシエーション成功する仕様にこちらのバージョンにアプリケーションが書かれるためにルールに乗っ取って可能です。
その場合、
アプリケーションはこのバージョンで定義された構文の中で合うより高いバージョンの機能性への保証付き利用権であるにすぎません、
例えば新しいIoctlコードと既存の機能の新しい作用。
新機能は判り難いかもしれない。
将来のバージョンの新しい構文への完全なアクセスを得ます、
アプリケーションはその将来のバージョンに完全に従わなければなりません、
例えば新しいヘッダファイルを使用して再コンパイルするなど、
新しいライブラリへのリンキング、またはその他の特別な場合。
このネゴシエーションはWS2_32.DLLとさまざまなウィンドウズ・ソケッツ・バージョンに対応する事の両方を許可します。
共通部分がバージョン範囲にあるならばアプリケーションはWS2_32.DLLを使用可能です。
以下の表では異なるアプリケーションとWS2_32.DLLバージョンでWSAStartupがどの様に働くかを示します。
|