LPWSPSTRINGTOADDRESS
コールバックシグネチャ
INT LPWSPSTRINGTOADDRESS(
LPWSTR AddressString,
INT AddressFamily,
WSAPROTOCOL_INFOW* lpProtocolInfo,
SOCKADDR* lpAddress,
INT* lpAddressLength,
INT* lpErrno
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| AddressString | LPWSTR | 変換対象の、ゼロ終端された人間が読める文字列へのポインター。 |
| AddressFamily | INT | 文字列が属するアドレスファミリ。不明な場合は AF_UNSPEC を指定します。 |
| lpProtocolInfo | WSAPROTOCOL_INFOW* | (必須) プロバイダーの WSAProtocol_Info 構造体。 |
| lpAddress | SOCKADDR* | 1 つの sockaddr 構造体が格納されるバッファー。 |
| lpAddressLength | INT* | Address バッファーの長さ (バイト単位)。結果として得られる sockaddr 構造体のサイズが返されます。指定されたバッファーが十分な大きさでない場合、この関数は WSAEFAULT という固有のエラーで失敗し、このパラメーターには必要なサイズがバイト単位で設定されます。 |
| lpErrno | INT* | エラーコードへのポインター。 |
公式ドキュメント
WSPStringToAddress 関数は、人間が読める数値文字列を、そのような構造体を受け取る Windows Sockets ルーチンに渡すのに適したソケットアドレス構造体 (sockaddr) に変換します。アドレスに欠けている要素があれば、可能な場合は妥当な既定値が設定されます。たとえば、ポート番号が指定されていない場合の既定値は 0 です。
戻り値
エラーが発生しなかった場合、 WSPStringToAddress は 0 を返します。それ以外の場合は SOCKET_ERROR が返され、固有のエラーコードを lpErrno から取得できます。
| エラーコード | 意味 |
|---|---|
| 指定されたアドレスバッファーが小さすぎます。より大きなバッファーを渡してください。 | |
| 文字列を sockaddr に変換できなかったか、プロバイダーが指定されたアドレスファミリをサポートできなかったか、指定された lpProtocolInfo がプロバイダーのサポートする WSAProtocol_Info 構造体を参照していませんでした。 |
解説(Remarks)
階層化サービスプロバイダー (LSP) はこの関数の実装を提供しますが、プロトコルチェーン内の次の層の WSPStringToAddress を呼び出す場合には、この関数のクライアントにもなります。この関数の lpProtocolInfo パラメーターには、プロトコルチェーンの各層を通じて伝搬される際に特別な考慮事項があります。
プロトコルチェーン内の次の層がさらに別の層である場合、次の層の WSPStringToAddress を呼び出すときに、この層は変更されていないチェーン情報を持つ同一の未変更の WSAProtocol_Info 構造体を参照する lpProtocolInfo を次の層に渡す必要があります。ただし、次の層が基本プロトコル (つまりチェーンの最後の要素) である場合、この層は基本プロバイダーの WSPStringToAddress を呼び出すときに置き換えを行います。この場合、lpProtocolInfo パラメーターは基本プロバイダーの WSAPROTOCOL_INFO 構造体を参照している必要があります。
この方針の重要な利点の 1 つは、基本サービスプロバイダーがプロトコルチェーンを意識する必要がないことです。
これと同じ伝搬方針は、 LPWSPAddressToString、 LPWSPDuplicateSocket、 WSPStartup、 LPWSPSocket など、他の関数の階層化されたシーケンスを通じて WSAProtocol_Info 構造体を伝搬する場合にも適用されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)