共用方式為


名稱解析函式的摘要

名稱解析函式可以分成三個類別:服務安裝、用戶端查詢和協助程式 (宏) 。 後續各節會識別每個類別中的函式,並簡短描述其預期用途。 也會描述索引鍵資料結構。

服務安裝

當必要的服務類別不存在時,應用程式會使用 WSAInstallServiceClass 來提供服務類別名稱、服務類別識別碼的 GUID,以及一系列的 WSANSCLASSINFO 結構來安裝新的服務類別。 這些結構都是特定命名空間特有的,並提供一般值,例如建議的 TCP 埠號碼或 NetWare SAP 識別碼。 呼叫 WSARemoveServiceClass 並提供對應至類別識別碼的 GUID,即可移除服務類別。

一旦服務類別存在,就可以透過 WSASetService安裝或移除服務的特定實例。 此函式會採用 WSAQUERYSET 結構作為輸入參數,以及作業程式碼和作業旗標。 作業程式碼會指出正在安裝或移除服務。 WSAQUERYSET結構提供服務的所有相關資訊,包括服務類別識別碼、此實例的服務名稱 () 、適用的命名空間識別碼和通訊協定資訊,以及服務接聽所在的一組傳輸位址。 服務在初始化時應該叫用 WSASetService ,以在動態命名空間中公告其存在狀態。

用戶端查詢

WSAEnumNameSpaceProviders函式可讓應用程式探索可透過 Winsock 名稱解析設施存取哪些命名空間。 它也可讓應用程式判斷多個命名空間提供者是否支援指定的命名空間,以及探索任何特定命名空間提供者的提供者識別碼。 使用提供者識別碼,應用程式可以將查詢作業限制為指定的命名空間提供者。

Winsock 命名空間–查詢作業牽涉到一系列呼叫: WSALookupServiceBegin,後面接著一或多個 WSALookupServiceNext 的呼叫,並以呼叫 WSALookupServiceEnd結尾。 WSALookupServiceBegin 會採用 WSAQUERYSET 結構作為輸入,以定義查詢參數以及一組旗標,以提供搜尋作業的其他控制權。 它會傳回查詢控制碼,用於後續對 WSALookupServiceNextWSALookupServiceEnd的呼叫。

應用程式會叫用 WSALookupServiceNext 來取得查詢結果,並在應用程式提供的 WSAQUERYSET 緩衝區中提供結果。 應用程式會繼續呼叫 WSALookupServiceNext ,直到傳回錯誤碼WSA_E_NO_MORE,指出已擷取所有結果。 搜尋接著會由呼叫 WSALookupServiceEnd終止。 從另一個執行緒呼叫時,也可以使用 WSALookupServiceEnd 函式來取消目前擱置的 WSALookupServiceNext

在 Windows Sockets 2 中,WSAENOMORE (10102) 定義衝突的錯誤碼,WSA_E_NO_MORE (10110) 。 未來版本將會移除錯誤碼 WSAENOMORE,而且只會保留WSA_E_NO_MORE。 不過,針對 Windows Sockets 2,應用程式應該同時檢查 WSAENOMORE 和 WSA_E_NO_MORE,以取得與使用任一個命名空間提供者的最大相容性。

輔助函式

名稱解析協助程式函式包含一個函式,可擷取服務類別名稱,指定服務類別識別碼、一組用來轉譯 SOCKADDR 結構和 ASCII 字串表示之間的傳輸位址的函式、擷取指定服務類別的服務類別架構資訊,以及一組用來將已知服務對應至預先配置 GUID 的宏。

Winsock2.h 的下列宏有助於在已知服務類別與這些命名空間之間進行對應:

巨集 描述
SVCID_TCP (埠) SVCID_UDP (埠)
SVCID_NETWARE (物件類型)
針對 TCP/IP 或 UDP/IP 或 NetWare 案例中的物件類型指定埠,會以主機順序傳回 GUID (埠號碼) 。
IS_SVCID_TCP (GUID) IS_SVCID_UDP (GUID)
IS_SVCID_NETWARE (GUID)
如果 GUID 在允許的範圍內,則會傳回 TRUE
SET_TCP_SVCID (GUID、埠) SET_UDP_SVCID (GUID、埠)
使用相當於 TCP 或 UDP 埠號碼的 GUID 來初始化 GUID 結構, (埠號碼必須以主機順序) 。
PORT_FROM_SVCID_TCP (GUID) PORT_FROM_SVCID_UDP (GUID)
SAPID_FROM_SVCID_NETWARE (GUID)
以主機順序傳回與 GUID 相關聯的埠或物件類型 (埠號碼) 。

 

getaddrinfo

GetAddrInfoEx

GetAddrInfoW

getnameinfo

GetNameInfoW

名稱解析資料結構

名稱解析模型

通訊協定獨立名稱解析

註冊和名稱解析

SOCKADDR

WSAEnumNameSpaceProviders

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSARemoveServiceClass

WSASetService

WSAQUERYSET

WSANSCLASSINFO