WSAAsyncGetHostByAddr マクロ (wsipv6ok.h)

WSAAsyncGetHostByAddr 関数は、アドレスに対応するホスト情報を非同期的に取得します。

メモWSAAsyncGetHostByAddr 関数は、複数のアドレスの並列解決を提供するようには設計されていません。 したがって、複数の要求を発行するアプリケーションでは、同時に実行されることを想定しないでください。 または、アプリケーションで別のスレッドを開始し、 getnameinfo 関数を使用して IP バージョンに依存しない方法でアドレスを解決することもできます。 Windows Sockets 2 アプリケーションを作成する開発者は、 getnameinfo 関数を使用して、IPv6 互換性へのスムーズな移行を可能にするよう促されます。
 

構文

void WSAAsyncGetHostByAddr(
  [in]   a,
  [in]   b,
  [in]   c,
  [in]   d,
  [in]   e,
  [out]  f,
  [in]   g
);

パラメーター

[in] a

非同期要求が完了したときにメッセージを受信するウィンドウのハンドル。

[in] b

非同期要求が完了したときに受信するメッセージ。

[in] c

ホストのネットワーク アドレスへのポインター。 ホスト アドレスは、ネットワークのバイト順に格納されます。

[in] d

アドレスの長さ (バイト単位)。

[in] e

アドレスの種類。

[out] f

ホストデータを受信するデータ領域へのポインター。 データ領域は、ホスト型構造体と、ホスト型構造体のメンバーによって参照されるすべてのデータを格納するために Windows ソケットによって使用されるため、データ領域はホスト型構造体のサイズよりも大きくする必要があります。 MAXGETHOSTSTRUCT バイトのバッファーをお勧めします。

[in] g

buf パラメーターのデータ領域のサイズ (バイト単位)。

戻り値

なし

解説

WSAAsyncGetHostByAddr 関数は、gethostbyaddr の非同期バージョンです。 ネットワーク アドレスに対応するホスト名とアドレス情報を取得するために使用されます。 Windows ソケットは操作を開始し、呼び出し元にすぐに戻り、アプリケーションが操作を識別するために使用できる不透明な非同期タスク ハンドルを返します。 操作が完了すると、結果 (存在する場合) が呼び出し元によって提供されるバッファーにコピーされ、メッセージがアプリケーションのウィンドウに送信されます。

非同期操作が完了すると、 hWnd パラメーターによって示されるアプリケーション ウィンドウは 、wMsg パラメーターでメッセージを受信します。 wParam パラメーターには、元の関数呼び出しによって返される非同期タスク ハンドルが含まれています。 lParam の上位 16 ビットには、エラー コードが含まれています。 エラー コードには、Winsock2.h で定義されている任意のエラーを指定できます。 エラー コード 0 は、非同期操作が正常に完了したことを示します。

正常に完了すると、元の関数呼び出しに指定されたバッファーに ホスト型 構造体が含まれます。 この構造体のメンバーにアクセスするために、元のバッファー アドレスは ホスト型 構造体ポインターにキャストされ、必要に応じてアクセスされます。

エラー コードが WSAENOBUFS の場合、元の呼び出しで buflen によって指定されたバッファーのサイズが小さすぎて、結果のすべての情報が格納されませんでした。 この場合、 lParam の下位 16 ビットには、必要なすべての情報を提供するために必要なバッファーのサイズが含まれます。 部分データが不十分であるとアプリケーションが判断した場合、 WSAAsyncGetHostByAddr 関数呼び出しを、必要なすべての情報を受信するのに十分な大きさのバッファーを使用して再発行できます (つまり、 lParam の 16 ビット未満)。

この関数に指定されたバッファーは、同じ ホスト 型構造体のメンバーによって参照されるデータ領域の内容と共に構造体を構築するために、Windows ソケットによって使用されます。 WSAENOBUFS エラーを回避するには、アプリケーションで少なくとも MAXGETHOSTSTRUCT バイトのバッファーを指定する必要があります (Winsock2.h で定義されています)。

エラー コードとバッファー長は、Winsock2.h で次のように定義されているマクロ WSAGETASYNCERRORWSAGETASYNCBUFLEN を使用して lParam から抽出する必要があります。

#include <windows.h>

#define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)
#define WSAGETASYNCERROR(lParam)            HIWORD(lParam)

これらのマクロを使用すると、アプリケーションのソース コードの移植性が最大化されます。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー wsipv6ok.h (Winsock2.h、Winsock.h を含む)
Library Ws2_32.lib
[DLL] Ws2_32.dll

こちらもご覧ください

WSACancelAsyncRequest

Winsock 関数

Winsock リファレンス

getaddrinfo

gethostbyaddr

getnameinfo

hostent