ADDRINFOEX5结构 (ws2def.h)

GetAddrInfoEx 函数使用 addrinfoex4 结构,以在请求特定网络接口时保存主机地址信息。

语法

typedef struct addrinfoex5 {
  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;
} ADDRINFOEX5, *PADDRINFOEX5, *LPADDRINFOEX5;

成员

ai_flags

指示 GetAddrInfoEx 函数中使用的选项的标志。

ai_flags 成员支持的值在 Winsock2.h 包含文件中定义,并且可以是以下选项的组合。

价值 意义
AI_PASSIVE
0x01
套接字地址将在对 绑定函数的调用中使用。
AI_CANONNAME
0x02
规范名称在第一个 ai_canonname 成员中返回。
AI_NUMERICHOST
0x04
传递给 GetAddrInfoEx 函数的 nodename 参数必须是数值字符串。
AI_ALL
0x0100
如果设置了此位,则会为具有 AI_V4MAPPED的 IPv6 地址和 IPv4 地址发出请求。

Windows Vista 及更高版本支持此选项。

AI_ADDRCONFIG
0x0400
仅当配置全局地址时,GetAddrInfoEx 才会解析。 IPv6 和 IPv4 环回地址不被视为有效的全局地址。

Windows Vista 及更高版本支持此选项。

AI_V4MAPPED
0x0800
如果 GetAddrInfoEx IPv6 地址请求失败,则会对 IPv4 地址发出名称服务请求,并且这些地址转换为 IPv4 映射的 IPv6 地址格式。

Windows Vista 及更高版本支持此选项。

AI_NON_AUTHORITATIVE
0x04000
地址信息来自非权威结果。

GetAddrInfoExpHints 参数中设置此选项时,NS_EMAIL 命名空间提供程序将返回权威和非权威结果。 如果未设置此选项,则仅返回权威结果。

此选项仅在 Windows Vista 及更高版本上受 NS_EMAIL 命名空间支持。

AI_SECURE
0x08000
地址信息来自安全通道。

如果设置了 AI_SECURE 位,则 NS_EMAIL 命名空间提供程序将返回通过增强的安全性获取的结果,以最大程度地减少可能的欺骗。

GetAddrInfoExpHints 参数中设置此选项时,NS_EMAIL 命名空间提供程序仅返回通过增强的安全性获取的结果,以最大程度地减少可能的欺骗。

此选项仅在 Windows Vista 及更高版本上受 NS_EMAIL 命名空间支持。

AI_RETURN_PREFERRED_NAMES
0x010000
地址信息适用于具有特定命名空间的发布的首选名称。

GetAddrInfoExpHints 参数中设置此选项时,pName 参数中不应提供任何名称,NS_EMAIL 命名空间提供程序将返回发布的首选名称。

此选项仅在 Windows Vista 及更高版本上受 NS_EMAIL 命名空间支持。

AI_FQDN
0x00020000
完全限定的域名在第一个 ai_fqdn 成员中返回。

GetAddrInfoExpHints 参数中设置此选项时,pName 参数中指定了平面名称(单一标签),则最终解析为该名称的完全限定域名将返回。

Windows 7、Windows Server 2008 R2 及更高版本支持此选项。

AI_FILESERVER
0x00040000
命名空间提供程序提示正在文件共享方案中使用要查询的主机名。 命名空间提供程序可能会忽略此提示。

Windows 7、Windows Server 2008 R2 及更高版本支持此选项。

AI_DISABLE_IDN_ENCODING
0x00080000
getAddrInfoEx 函数调用的名称解析函数中使用 Punycode 禁用自动国际域名编码。

Windows 8、Windows Server 2012 及更高版本支持此选项。

AI_EXTENDED
0x80000000
指示当前对象已扩展:即 addrinfoex2 或更高版本。

Windows 8.1、Windows Server 2012 R2 及更高版本支持此选项。

AI_RESOLUTION_HANDLE
0x40000000
解析句柄在 ai_resolutionhandle 成员中返回。

Windows 10、Windows Server 2016 及更高版本支持此选项。

AI_RETURN_TTL
0x0080
DNS 记录有效的秒数。 如果存在此标志,GetAddrInfoExppResult 参数将返回 addrinfoex5 结构的列表,其中 ai_ttl 成员将包含 DNS 记录的各个 TTL。

ai_family

地址系列。

地址系列的可能值在 Ws2def.h 头文件中定义。 请注意,Ws2def.h 头文件自动包含在 Winsock2.h中,不应直接使用。

当前支持的值是 AF_INETAF_INET6,它们是 IPv4 和 IPv6 的 Internet 地址系列格式。 如果安装了地址系列的 Windows 套接字服务提供商,则支持地址系列的其他选项(例如,用于 NetBIOS 的AF_NETBIOS)。 请注意,AF_地址系列和PF_协议系列常量的值相同(例如,AF_INETPF_INET),因此可以使用任一常量。

下表列出了地址系列的公共值,尽管可能有多个其他值。

价值 意义
AF_UNSPEC
0
未指定地址系列。
AF_INET
2
Internet 协议版本 4 (IPv4) 地址系列。
AF_NETBIOS
17
NetBIOS 地址系列。 仅当安装了适用于 NetBIOS 的 Windows 套接字提供程序时,才支持此地址系列。
AF_INET6
23
Internet 协议版本 6 (IPv6) 地址系列。
AF_IRDA
26
红外数据关联(IrDA)地址系列。 仅当计算机安装了红外端口和驱动程序时,才支持此地址系列。
AF_BTH
32
蓝牙地址系列。 仅当安装了蓝牙适配器时,才支持此地址系列。

ai_socktype

套接字类型。 套接字类型的可能值在 Winsock2.h include 文件中定义。

下表列出了 Windows 套接字 2 支持的套接字类型的可能值:

价值 意义
SOCK_STREAM
1
使用 OOB 数据传输机制提供基于连接的有序双向字节流。 将传输控制协议(TCP)用于 Internet 地址系列(AF_INETAF_INET6)。 如果 ai_family 成员 AF_IRDA,则 SOCK_STREAM 是唯一受支持的套接字类型。
SOCK_DGRAM
2
支持数据报,这些数据报是固定(通常较小)最大长度的无连接、不可靠的缓冲区。 将用户数据报协议(UDP)用于 Internet 地址系列(AF_INETAF_INET6)。
SOCK_RAW
3
提供一个原始套接字,允许应用程序操作下一层协议标头。 若要操作 IPv4 标头,必须在套接字上设置 IP_HDRINCL 套接字选项。 若要操作 IPv6 标头,必须在套接字上设置 IPV6_HDRINCL 套接字选项。
SOCK_RDM
4
提供可靠的消息数据报。 此类型的一个示例是 Windows 中的实用常规多播(PGM)多播协议实现,通常称为 可靠的多播编程
SOCK_SEQPACKET
5
提供基于数据报的伪流数据包。
 

在 Windows 套接字 2 中,引入了新的套接字类型。 应用程序可以通过 WSAEnumProtocols 函数动态发现每个可用传输协议的属性。 因此,应用程序可以确定地址系列可能的套接字类型和协议选项,并在指定此参数时使用此信息。 Winsock2.hWs2def.h 头文件中的套接字类型定义将定期更新,因为定义了新的套接字类型、地址系列和协议。

在 Windows 套接字 1.1 中,唯一可能的套接字类型是 SOCK_DATAGRAMSOCK_STREAM

ai_protocol

协议类型。 可能的选项特定于指定的地址系列和套接字类型。 Winsock2.hWsrm.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 成员的常见值,尽管可能有多个其他值。

价值 意义
IPPROTO_TCP
6
传输控制协议 (TCP)。 当 ai_family 成员 AF_INETAF_INET6ai_socktype 成员 SOCK_STREAM时,此值是可能的。
IPPROTO_UDP
17
用户数据报协议(UDP)。 当 ai_family 成员 AF_INETAF_INET6类型 参数 SOCK_DGRAM时,此值是可能的。
IPPROTO_RM
113
可靠多播的 PGM 协议。 当 ai_family 成员 AF_INETai_socktype 成员 SOCK_RDM时,此值是可能的。 在适用于 Windows Vista 及更高版本的 Windows SDK 上,此值也称为 IPPROTO_PGM
 

如果 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 记录有效的秒数。

言论

ADDRINFOEX5 结构由 GetAddrInfoExW 函数用于在通过 GetAddrInfoExW提示 参数传入的 ai_flags 成员中设置 AI_EXTENDEDAI_RETURN_TTL 位时保存主机地址信息。

ADDRINFOEX5 结构是 ADDRINFOEX4 结构的扩展。 除了 ADDRINFOEX4 结构中的所有字段外,它还保存在 ai_ttl 成员中,每个返回的 IP 地址的单个 DNS TTL。

如果在通过 GetAddrInfoEx提示 参数传入的 ai_flags 成员中设置 AI_RETURN_TTL 位,则 GetAddrInfoExWppResult 参数将返回 ADDRINFOEX5 结构的列表。 此列表中的每个节点将包含在 ai_ttl 成员中,sockaddr 成员中存在的 IP 地址的单个 DNS TTL。

例子

请参阅 ADDRINFOEX4 结构主题中的示例代码。

要求

要求 价值
最低支持的客户端 Windows 10 内部版本 20348
支持的最低服务器 Windows 10 内部版本 20348
标头 ws2def.h

另请参阅

GetAddrInfoEx

addrinfo

addrinfoW

addrinfoex

addrinfoex3