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 包含文件中定义,并且可以是以下选项的组合。
价值 | 意义 |
---|---|
|
套接字地址将在对 绑定函数的调用中使用。 |
|
规范名称在第一个 ai_canonname 成员中返回。 |
|
传递给 GetAddrInfoEx 函数的 nodename 参数必须是数值字符串。 |
|
如果设置了此位,则会为具有 AI_V4MAPPED的 IPv6 地址和 IPv4 地址发出请求。
Windows Vista 及更高版本支持此选项。 |
|
仅当配置全局地址时,GetAddrInfoEx 才会解析。 IPv6 和 IPv4 环回地址不被视为有效的全局地址。
Windows Vista 及更高版本支持此选项。 |
|
如果 GetAddrInfoEx IPv6 地址请求失败,则会对 IPv4 地址发出名称服务请求,并且这些地址转换为 IPv4 映射的 IPv6 地址格式。
Windows Vista 及更高版本支持此选项。 |
|
地址信息来自非权威结果。
在 GetAddrInfoEx的 pHints 参数中设置此选项时,NS_EMAIL 命名空间提供程序将返回权威和非权威结果。 如果未设置此选项,则仅返回权威结果。 此选项仅在 Windows Vista 及更高版本上受 NS_EMAIL 命名空间支持。 |
|
地址信息来自安全通道。
如果设置了 AI_SECURE 位,则 NS_EMAIL 命名空间提供程序将返回通过增强的安全性获取的结果,以最大程度地减少可能的欺骗。 在 GetAddrInfoExpHints 参数中设置此选项时,NS_EMAIL 命名空间提供程序仅返回通过增强的安全性获取的结果,以最大程度地减少可能的欺骗。 此选项仅在 Windows Vista 及更高版本上受 NS_EMAIL 命名空间支持。 |
|
地址信息适用于具有特定命名空间的发布的首选名称。
在 GetAddrInfoEx的 pHints 参数中设置此选项时,pName 参数中不应提供任何名称,NS_EMAIL 命名空间提供程序将返回发布的首选名称。 此选项仅在 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 的 Internet 地址系列格式。 如果安装了地址系列的 Windows 套接字服务提供商,则支持地址系列的其他选项(例如,用于 NetBIOS 的AF_NETBIOS)。 请注意,AF_地址系列和PF_协议系列常量的值相同(例如,AF_INET 和 PF_INET),因此可以使用任一常量。
下表列出了地址系列的公共值,尽管可能有多个其他值。
ai_socktype
套接字类型。 套接字类型的可能值在 Winsock2.h include 文件中定义。
下表列出了 Windows 套接字 2 支持的套接字类型的可能值:
价值 | 意义 |
---|---|
|
使用 OOB 数据传输机制提供基于连接的有序双向字节流。 将传输控制协议(TCP)用于 Internet 地址系列(AF_INET 或 AF_INET6)。 如果 ai_family 成员 AF_IRDA,则 SOCK_STREAM 是唯一受支持的套接字类型。 |
|
支持数据报,这些数据报是固定(通常较小)最大长度的无连接、不可靠的缓冲区。 将用户数据报协议(UDP)用于 Internet 地址系列(AF_INET 或 AF_INET6)。 |
|
提供一个原始套接字,允许应用程序操作下一层协议标头。 若要操作 IPv4 标头,必须在套接字上设置 IP_HDRINCL 套接字选项。 若要操作 IPv6 标头,必须在套接字上设置 IPV6_HDRINCL 套接字选项。 |
|
提供可靠的消息数据报。 此类型的一个示例是 Windows 中的实用常规多播(PGM)多播协议实现,通常称为 可靠的多播编程。 |
|
提供基于数据报的伪流数据包。 |
在 Windows 套接字 2 中,引入了新的套接字类型。 应用程序可以通过 WSAEnumProtocols 函数动态发现每个可用传输协议的属性。 因此,应用程序可以确定地址系列可能的套接字类型和协议选项,并在指定此参数时使用此信息。 Winsock2.h 和 Ws2def.h 头文件中的套接字类型定义将定期更新,因为定义了新的套接字类型、地址系列和协议。
在 Windows 套接字 1.1 中,唯一可能的套接字类型是 SOCK_DATAGRAM 和 SOCK_STREAM。
ai_protocol
协议类型。 可能的选项特定于指定的地址系列和套接字类型。 Winsock2.h 和 Wsrm.h 头文件中定义了 ai_protocol 的可能值。
在适用于 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
接口索引,由
ai_resolutionhandle
指向主机的完全限定域名的句柄。
ai_ttl
此 DNS 记录有效的秒数。
ai_numservers
ai_servers 成员中存在的自定义 DNS 服务器数。
ai_servers
N 数组(其中 N == ai_numservers) ADDRINFO_DNS_SERVER 对象。 如果 ai_numservers 为 0,则必须 NULLai_servers。
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_flags 成员中存在 AI_RETURN_RESPONSE_FLAGS 标志,则 GetAddrInfoExppResult 参数将返回 ADDRINFOEX6 结构列表,其中 ai_responseflags 成员将包含有关 DNS 结果源的信息。
如果 ai_numservers 和 ai_servers 成员指向有效 ADDRINFO_DNS_SERVER 对象的数组,则 DNS 查询会将这些服务器作为回退添加到系统配置的 DNS 服务器。 如果 ai_flags 成员中存在 AI_EXCLUSIVE_CUSTOM_SERVERS 选项,则 DNS 查询将专门使用自定义服务器。
例子
请参阅 ADDRINFOEX4 结构主题中的示例代码。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 内部版本 22000 |
支持的最低服务器 | Windows 内部版本 22000 |
标头 | ws2def.h |