WSAAsyncGetHostByName 巨集 (wsipv6ok.h)

WSAAsyncGetHostByName 函式會以異步方式擷取對應至主機名的主機資訊。

注意WSAAsyncGetHostByName 函式並非設計來提供數個名稱的平行解析。 因此,發出數個要求的應用程式不應預期會同時執行。 或者,應用程式可以啟動另一個線程,並使用 getaddrinfo 函式,以 IP 版本無關的方式解析名稱。 建立 Windows Sockets 2 應用程式的開發人員會鼓勵使用 getaddrinfo 函式,以順暢地轉換至 IPv6 相容性。
 

語法

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

參數

[in] a

當異步要求完成時,將會收到訊息的視窗句柄。

[in] b

異步要求完成時要接收的訊息。

[in] c

主機之 Null 終止名稱的指標。

[out] d

要接收 控數據的數據區指標。 數據區必須大於 hostent 結構的大小,因為 Windows Sockets 會使用指定的數據區來包含 hostent 結構,以及 hostent 結構成員所參考的所有數據。 建議使用 MAXGETHOSTSTRUCT 位元組的緩衝區。

[in] e

buf 參數的數據區域大小,以位元組為單位。

傳回值

備註

WSAAsyncGetHostByName 函式是 gethostbyname 的異步版本,用來擷取與主機名對應的主機名和地址資訊。 Windows Sockets 會起始作業並立即返回呼叫端,並傳回應用程式可用來識別作業的不透明異步工作句柄。 當作業完成時,如果呼叫端提供的任何) 複製到緩衝區,並將訊息傳送至應用程式的視窗,則結果會 (。

異步操作完成時, hWnd 參數所指示的應用程式視窗會在 wMsg 參數中接收訊息。 wParam 參數包含原始函式呼叫所傳回的異步工作句柄。 lParam 的高 16 位包含任何錯誤碼。 錯誤碼可以是 Winsock2.h 中定義的任何錯誤。 錯誤碼為零表示異步操作成功完成。

成功完成時,指定給原始函式呼叫的緩衝區包含 hostent 結構。 若要存取這個結構的元素,原始緩衝區位址應該轉換成 hostent 結構指標,並視需要存取。

如果錯誤碼是 WSAENOBUFS,則原始呼叫中 buflen 所指定的緩衝區大小太小,無法包含所有產生的資訊。 在此情況下, lParam 的低 16 位包含提供所有必要資訊所需的緩衝區大小。 如果應用程式決定部分數據不足,它可能會重新發出 WSAAsyncGetHostByName 函式呼叫,且緩衝區夠大,以接收所有所需資訊 (,這不小於 lParam) 的低 16 位。

Windows Sockets 會使用此函式所指定的緩衝區來建構 hostent 結構,以及相同 hostent 結構成員所參考的數據區域內容。 若要避免 WSAENOBUFS 錯誤,應用程式應該提供至少 MAXGETHOSTSTRUCT 位元組的緩衝區 (,如 Winsock2.h) 中所定義。

使用 Winsock2.h 中定義的宏 WSAGETASYNCERRORWSAGETASYNCBUFLEN,應該從 lParam 擷取錯誤碼和緩衝區長度:

#include <windows.h>

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

使用這些宏將最大化應用程式的原始程式碼可移植性。

WSAAsyncGetHostByName 保證會解析成功呼叫 gethostname 所傳回的字串。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 wsipv6ok.h (包括 Winsock2.h、Winsock.h)
程式庫 Ws2_32.lib
Dll Ws2_32.dll

另請參閱

WSACancelAsyncRequest

Winsock 函式

Winsock 參考

getaddrinfo

gethostbyname

getnameinfo

hostent