ADDRINFOEX6結構 (ws2def.h)
GetAddrInfoEx 函式會使用addrinfoex4結構,在要求特定網路介面時保存主機位址資訊。
語法
typedef struct addrinfoex6 {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
size_t ai_addrlen;
PWSTR ai_canonname;
struct sockaddr *ai_addr;
void *ai_blob;
size_t ai_bloblen;
GUID *ai_provider;
struct addrinfoex5 *ai_next;
int ai_version;
PWSTR ai_fqdn;
int ai_interfaceindex;
HANDLE ai_resolutionhandle;
unsigned int ai_ttl;
unsigned int ai_numservers;
ADDRINFO_DNS_SERVER *ai_servers;
ULONG64 ai_responseflags;
} ADDRINFOEX6, *PADDRINFOEX6;
成員
ai_flags
旗標,指出 GetAddrInfoEx 函式中使用的選項。
ai_flags成員的支援值定義于Winsock2.h include 檔案中,而且可以是下列選項的組合。
值 | 意義 |
---|---|
|
通訊端位址將用於對 bind函式的呼叫。 |
|
標準名稱會在第一 個ai_canonname 成員中傳回。 |
|
傳遞至GetAddrInfoEx函式的nodename參數必須是數值字串。 |
|
如果設定此位,則會針對具有 AI_V4MAPPED的 IPv6 位址和 IPv4 位址提出要求。
Windows Vista 和更新版本支援此選項。 |
|
只有在設定全域位址時 ,GetAddrInfoEx 才會解析。 IPv6 和 IPv4 回送位址不會被視為有效的全域位址。
Windows Vista 和更新版本支援此選項。 |
|
如果 IPv6 位址的 GetAddrInfoEx 要求失敗,則會針對 IPv4 位址提出名稱服務要求,而且這些位址會轉換成 IPv4 對應 IPv6 位址格式。
Windows Vista 和更新版本支援此選項。 |
|
位址資訊來自非授權結果。
當此選項在GetAddrInfoEx的pHints參數中設定時,NS_EMAIL命名空間提供者會同時傳回授權和非授權結果。 如果未設定此選項,則只會傳回授權結果。 只有 windows Vista 和更新版本的 windows Vista 才支援此選項 ,NS_EMAIL 命名空間。 |
|
位址資訊來自安全通道。
如果設定 AI_SECURE 位, NS_EMAIL 命名空間提供者會傳回以增強安全性取得的結果,以將可能的詐騙降到最低。 當此選項在GetAddrInfoEx的pHints參數中設定時,NS_EMAIL命名空間提供者只會傳回以增強安全性取得的結果,以將可能的詐騙降到最低。 只有 windows Vista 和更新版本的 windows Vista 才支援此選項 ,NS_EMAIL 命名空間。 |
|
位址資訊適用于具有特定命名空間之發行集的慣用名稱。
當此選項在GetAddrInfoEx的pHints參數中設定時,pName參數中不應該提供任何名稱,而且NS_EMAIL命名空間提供者會傳回發行集的慣用名稱。 只有 windows Vista 和更新版本的 windows Vista 才支援此選項 ,NS_EMAIL 命名空間。 |
|
完整功能變數名稱會在第一個 ai_fqdn 成員中傳回。
在GetAddrInfoEx的pHints參數中設定此選項,並在pName參數中指定單一標籤 (單一標籤) 的一般名稱時,最終會傳回名稱的完整功能變數名稱。 Windows 7、Windows Server 2008 R2 和更新版本支援此選項。 |
|
命名空間提供者的提示,指出正在查詢的主機名稱正用於檔案共用案例中。 命名空間提供者可能會忽略此提示。
Windows 7、Windows Server 2008 R2 和更新版本支援此選項。 |
|
在 GetAddrInfoEx 函式所呼叫的名稱解析函式中使用 Punycode 停用自動國際功能變數名稱編碼。
Windows 8、Windows Server 2012 和更新版本支援此選項。 |
|
表示目前的 物件已擴充:也就是 addrinfoex2 或更新版本。
Windows 8.1、Windows Server 2012 R2 和更新版本支援此選項。 |
|
解析控制碼會在 ai_resolutionhandle 成員中傳回。
Windows 10、Windows Server 2016及更新版本支援此選項。 |
|
DNS 記錄有效秒數。 如果存在此旗標, GetAddrInfoEx。ppResult 參數會傳回 addrinfoex5 結構的清單,其中 ai_ttl 成員將包含 DNS 記錄的個別 TTL。 |
|
根據預設, ai_servers 成員中指定的伺服器會當做系統 DNS 伺服器的後援使用。 如果指定此選項,則 DNS 查詢會使用 獨佔ai_server 中指定的自訂伺服器。 |
|
要求有關 DNS 結果的額外資訊。 如果存在此旗標, GetAddrInfoExppResult 參數會傳回 addrinfoex6 結構的清單,其中 ai_responseflags 成員將包含 DNS 結果來源的相關資訊。 |
ai_family
位址系列。
位址系列的可能值定義在 Ws2def.h 標頭檔中。 請注意, Ws2def.h 標頭檔會自動包含在 Winsock2.h中,不應該直接使用。
目前支援的值是 AF_INET 或 AF_INET6,這是 IPv4 和 IPv6 的網際網路位址系列格式。 如果已安裝位址系列的 Windows Sockets 服務提供者,則支援位址系列 (AF_NETBIOS 用於 NetBIOS 的其他選項,例如,如果已安裝位址系列的 Windows 通訊端服務提供者,則支援) 。 請注意,AF_位址系列和PF_通訊協定系列常數的值 (相同,例如, AF_INET 和 PF_INET) ,因此可以使用任一個常數。
下表列出位址系列的常見值,但可能有許多其他值。
ai_socktype
通訊端類型。 通訊端類型的可能值定義于 Winsock2.h include 檔案中。
下表列出 Windows Sockets 2 支援的通訊端類型可能值:
值 | 意義 |
---|---|
|
使用 OOB 資料傳輸機制,提供循序、可靠、雙向的連線型位元組資料流程。 針對網際網路位址系列使用傳輸控制通訊協定 (TCP) (AF_INET 或 AF_INET6) 。 如果 ai_family 成員 AF_IRDA, 則SOCK_STREAM 是唯一支援的通訊端類型。 |
|
支援資料包,這些資料包是無連接、不可靠的固定 (緩衝區通常很小) 最大長度。 針對網際網路位址系列 (AF_INET或AF_INET6) 使用使用者資料包通訊協定 (UDP) 。 |
|
提供原始通訊端,可讓應用程式操作下一層通訊協定標頭。 若要操作 IPv4 標頭,必須在通訊端上設定 IP_HDRINCL 通訊端選項。 若要操作 IPv6 標頭,必須在通訊端上設定 IPV6_HDRINCL 通訊端選項。 |
|
提供可靠的訊息資料包。 此類型的範例是 Windows 中的「實用一般多播」 (PGM) 多播通訊協定實作,通常稱為 可靠的多播程式設計。 |
|
根據資料包提供虛擬資料流程封包。 |
在 Windows Sockets 2 中,引進了新的通訊端類型。 應用程式可以透過 WSAEnumProtocols 函式動態探索每個可用傳輸通訊協定的屬性。 因此,應用程式可以判斷位址系列可能的通訊端類型和通訊協定選項,並在指定此參數時使用此資訊。 Winsock2.h和Ws2def.h標頭檔中的通訊端類型定義將會定期更新,因為定義了新的通訊端類型、位址系列和通訊協定。
在 Windows Sockets 1.1 中,唯一可能的通訊端類型是 SOCK_DATAGRAM 和 SOCK_STREAM。
ai_protocol
通訊協定類型。 可能的選項專屬於指定的位址系列和通訊端類型。 ai_protocol的可能值定義于Winsock2.h和Wsrm.h標頭檔中。
在針對 Windows Vista 和更新版本發行的 Windows SDK 上,標頭檔的組織已變更,而且此成員可以是Ws2def.h標頭檔中定義之 IPPROTO列舉類型的其中一個值。 請注意, Ws2def.h 標頭檔會自動包含在 Winsock2.h中,不應該直接使用。
如果為 ai_protocol指定 0 的值,則呼叫端不想要指定通訊協定,而服務提供者會選擇要使用的 ai_protocol 。 對於 IPv4 和 IPv6 以外的通訊協定,請將 ai_protocol 設為零。
下表列出 ai_protocol 成員的一般值,但可能有許多其他值。
如果 ai_family 成員 AF_IRDA, 則ai_protocol 必須為 0。
ai_addrlen
ai_addr成員所指向之緩衝區的長度,以位元組為單位。
ai_canonname
主機的正式名稱。
ai_addr
sockaddr結構的指標。 每個傳回addrinfoex4結構中的ai_addr成員會指向已填入的通訊端位址結構。 ai_addrlen成員中指定每個傳回addrinfoex4結構的長度,以位元組為單位。
ai_blob
資料的指標,用來傳回與地址清單以外的名稱相關聯的提供者特定命名空間資訊。 ai_blob 所指向 緩衝區的長度,以位元組為單位,必須在 ai_bloblen 成員中指定。
ai_bloblen
ai_blob成員的長度,以位元組為單位。
ai_provider
特定命名空間提供者之 GUID 的指標。
ai_next
連結清單中的下一個 結構的指標。 此參數會在連結清單的最後一個addrinfoex4結構中設定為Null。
ai_version
這個 結構的版本號碼。 目前用於此結構版本的值為 4。
ai_fqdn
主機的完整功能變數名稱。
ai_interfaceindex
介面索引,如IP_ADAPTER_ADDRESSES所定義。GetAdaptersAddresses中傳回的IfIndex屬性。
ai_resolutionhandle
指向主機完整功能變數名稱的控制碼。
ai_ttl
此 DNS 記錄有效的秒數。
ai_numservers
ai_servers成員中存在的自訂 DNS 伺服器數目。
ai_servers
N (陣列,其中 N == ai_numservers) ADDRINFO_DNS_SERVER 物件。 如果 ai_numservers 為 0, 則ai_servers 必須為 Null。
ai_responseflags
傳回包含下列任何值的點陣圖。
常數 | 值 | 意義 |
---|---|---|
AI_DNS_RESPONSE_SECURE | 0x1 | 回應來自安全通訊協定,例如 DNS-over-HTTPS。 |
AI_DNS_RESPONSE_HOSTFILE | 0x2 | 回應來自 主機 檔案。 |
備註
ADDRINFOEX6結構是ADDRINFOEX5結構的延伸。 除了 ADDRINFOEX5 結構中的所有欄位之外,還會保留 ai_numservers 和 ai_servers 成員,以使用自訂的個別查詢 DNS 伺服器。 它也會保存 ai_responseflags 成員,其中包含 DNS 回應來源的相關資訊。
如果 AI_RETURN_RESPONSE_FLAGS 旗標存在於 ai_flags 成員中, 則 GetAddrInfoExppResult 參數會傳回 ADDRINFOEX6 結構的清單,其中 ai_responseflags 成員會包含 DNS 結果來源的相關資訊。
如果 ai_numservers 和 ai_servers 成員指向有效 ADDRINFO_DNS_SERVER 物件的陣列,則 DNS 查詢會將這些伺服器新增為系統設定的 DNS 伺服器後援。 如果 AI_EXCLUSIVE_CUSTOM_SERVERS 選項存在於 ai_flags 成員中,則 DNS 查詢會獨佔使用自訂伺服器。
範例
請參閱 ADDRINFOEX4 結構主題中的範例程式碼。
規格需求
最低支援的用戶端 | Windows 組建 22000 |
最低支援的伺服器 | Windows 組建 22000 |
標頭 | ws2def.h |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應