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