Win32 API 日本語リファレンス
ホーム › Networking.WinSock › LPWSPSTRINGTOADDRESS

LPWSPSTRINGTOADDRESS

コールバック

シグネチャ

INT LPWSPSTRINGTOADDRESS(
    LPWSTR AddressString,
    INT AddressFamily,
    WSAPROTOCOL_INFOW* lpProtocolInfo,
    SOCKADDR* lpAddress,
    INT* lpAddressLength,
    INT* lpErrno
);

パラメーター

フィールド型説明
AddressStringLPWSTR変換対象の、ゼロ終端された人間が読める文字列へのポインター。
AddressFamilyINT文字列が属するアドレスファミリ。不明な場合は AF_UNSPEC を指定します。
lpProtocolInfoWSAPROTOCOL_INFOW*(必須) プロバイダーの WSAProtocol_Info 構造体。
lpAddressSOCKADDR*1 つの sockaddr 構造体が格納されるバッファー。
lpAddressLengthINT*Address バッファーの長さ (バイト単位)。結果として得られる sockaddr 構造体のサイズが返されます。指定されたバッファーが十分な大きさでない場合、この関数は WSAEFAULT という固有のエラーで失敗し、このパラメーターには必要なサイズがバイト単位で設定されます。
lpErrnoINT*エラーコードへのポインター。

公式ドキュメント

WSPStringToAddress 関数は、人間が読める数値文字列を、そのような構造体を受け取る Windows Sockets ルーチンに渡すのに適したソケットアドレス構造体 (sockaddr) に変換します。アドレスに欠けている要素があれば、可能な場合は妥当な既定値が設定されます。たとえば、ポート番号が指定されていない場合の既定値は 0 です。

戻り値

エラーが発生しなかった場合、 WSPStringToAddress は 0 を返します。それ以外の場合は SOCKET_ERROR が返され、固有のエラーコードを lpErrno から取得できます。

エラーコード 意味
WSAEFAULT
指定されたアドレスバッファーが小さすぎます。より大きなバッファーを渡してください。
WSAEINVAL
文字列を sockaddr に変換できなかったか、プロバイダーが指定されたアドレスファミリをサポートできなかったか、指定された lpProtocolInfo がプロバイダーのサポートする WSAProtocol_Info 構造体を参照していませんでした。

解説(Remarks)

階層化サービスプロバイダー (LSP) はこの関数の実装を提供しますが、プロトコルチェーン内の次の層の WSPStringToAddress を呼び出す場合には、この関数のクライアントにもなります。この関数の lpProtocolInfo パラメーターには、プロトコルチェーンの各層を通じて伝搬される際に特別な考慮事項があります。

プロトコルチェーン内の次の層がさらに別の層である場合、次の層の WSPStringToAddress を呼び出すときに、この層は変更されていないチェーン情報を持つ同一の未変更の WSAProtocol_Info 構造体を参照する lpProtocolInfo を次の層に渡す必要があります。ただし、次の層が基本プロトコル (つまりチェーンの最後の要素) である場合、この層は基本プロバイダーの WSPStringToAddress を呼び出すときに置き換えを行います。この場合、lpProtocolInfo パラメーターは基本プロバイダーの WSAPROTOCOL_INFO 構造体を参照している必要があります。

この方針の重要な利点の 1 つは、基本サービスプロバイダーがプロトコルチェーンを意識する必要がないことです。

これと同じ伝搬方針は、 LPWSPAddressToString、 LPWSPDuplicateSocket、 WSPStartup、 LPWSPSocket など、他の関数の階層化されたシーケンスを通じて WSAProtocol_Info 構造体を伝搬する場合にも適用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)