WSAAsyncGetHostByName 宏 (wsipv6ok.h)

WSAAsyncGetHostByName 函数异步检索与主机名对应的主机信息。

注意WSAAsyncGetHostByName 函数并非旨在提供多个名称的并行解析。 因此,发出多个请求的应用程序不应期望它们同时执行。 或者,应用程序可以启动另一个线程,并使用 getaddrinfo 函数以与 IP 版本无关的方式解析名称。 建议创建 Windows 套接字 2 应用程序的开发人员使用 getaddrinfo 函数,以便顺利过渡到 IPv6 兼容性。
 

语法

void WSAAsyncGetHostByName(
  [in]   a,
  [in]   b,
  [in]   c,
  [out]  d,
  [in]   e
);

参数

[in] a

异步请求完成时将接收消息的窗口的句柄。

[in] b

异步请求完成时要接收的消息。

[in] c

指向以 null 结尾的主机名称的指针。

[out] d

指向用于接收 主机 数据的数据区域的指针。 数据区域必须大于主机结构的大小,因为 Windows 套接字使用指定的数据区域来包含宿主结构和 hostent 结构的成员引用的所有数据。 建议使用 MAXGETHOSTSTRUCT 字节的缓冲区。

[in] e

buf 参数的数据区域的大小(以字节为单位)。

返回值

备注

WSAAsyncGetHostByName 函数是 gethostbyname 的异步版本,用于检索与主机名对应的主机名和地址信息。 Windows 套接字启动操作并立即返回调用方,传递回应用程序可用于标识操作的不透明异步任务句柄。 操作完成后,如果任何) 复制到调用方提供的缓冲区中,结果 (,并将消息发送到应用程序的窗口。

异步操作完成后, hWnd 参数指示的应用程序窗口在 wMsg 参数中接收消息。 wParam 参数包含原始函数调用返回的异步任务句柄。 lParam 的高 16 位包含任何错误代码。 错误代码可以是 Winsock2.h 中定义的任何错误。 错误代码为零表示异步操作成功完成。

成功完成后,对原始函数调用指定的缓冲区将包含 hostent 结构。 若要访问此结构的元素,应将原始缓冲区地址强制转换为 hostent 结构指针,并根据需要对其进行访问。

如果错误代码为 WSAENOBUFS,则原始调用中 buflen 指定的缓冲区大小太小,无法包含所有生成的信息。 在这种情况下, lParam 的低 16 位包含提供所有必要信息所需的缓冲区大小。 如果应用程序确定部分数据不足,它可以重新发出 WSAAsyncGetHostByName 函数调用,其缓冲区足够大,可以接收所有所需信息 (,即不小于 lParam) 的低 16 位。

Windows 套接字使用此函数指定的缓冲区来构造 主机 结构,以及同一 hostent 结构的成员引用的数据区域的内容。 若要避免 WSAENOBUFS 错误,应用程序应提供至少包含 MAXGETHOSTSTRUCT 字节 (的缓冲区,如 Winsock2.h) 中定义。

应使用宏 WSAGETASYNCERRORWSAGETASYNCBUFLENlParam 中提取错误代码和缓冲区长度,这些宏在 Winsock2.h 中定义为:

#include <windows.h>

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

使用这些宏将最大程度地提高应用程序的源代码的可移植性。

WSAAsyncGetHostByName 保证解析成功调用 gethostname 返回的字符串。

要求

要求
最低受支持的客户端 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

gethostbyname

getnameinfo

hostent