ADDRINFOEX3 结构 (ws2def.h)
当请求特定网络接口时,GetAddrInfoEx 函数使用 addrinfoex3 结构来保存主机地址信息。
语法
typedef struct addrinfoex3 {
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;
LPGUID ai_provider;
struct addrinfoex3 *ai_next;
int ai_version;
PWSTR ai_fqdn;
int ai_interfaceindex;
} ADDRINFOEX3, *PADDRINFOEX3, *LPADDRINFOEX3;
成员
ai_flags
指示 GetAddrInfoEx 函数中使用的选项的标志。
ai_flags 成员支持的值在 Winsock2.h 包含文件中定义,可以是以下选项的组合。
值 | 含义 |
---|---|
|
套接字地址将用于对 绑定 函数的调用。 |
|
规范名称在第一 个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 和更高版本的 NS_EMAIL 命名空间才支持此选项。 |
|
地址信息来自安全通道。
如果设置了 AI_SECURE 位, NS_EMAIL 命名空间提供程序将返回以增强的安全性获取的结果,以尽量减少可能的欺骗。 在 GetAddrInfoEx 的 pHints 参数中设置此选项时,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_family
地址系列。
地址系列的可能值在 Ws2def.h 头文件中定义。 请注意, Ws2def.h 头文件会自动包含在 Winsock2.h 中,永远不应直接使用。
当前支持的值 是 AF_INET 或 AF_INET6,它们是 IPv4 和 IPv6 的 Internet 地址系列格式。 AF_NETBIOS用于 NetBIOS 的地址系列 ( 的其他选项,例如,如果安装了地址系列的 Windows 套接字服务提供商,则支持) 。 请注意,AF_地址系列和PF_协议系列常量的值 (相同,例如 ,AF_INET 和 PF_INET) ,因此可以使用任一常量。
下表列出了地址系列的常见值,尽管许多其他值是可能的。
ai_socktype
套接字类型。 套接字类型的可能值在 Winsock2.h 包含文件中定义。
下表列出了 Windows 套接字 2 支持的套接字类型的可能值:
值 | 含义 |
---|---|
|
使用 OOB 数据传输机制提供有序的可靠双向基于连接的字节流。 将传输控制协议 (TCP) 用于 Internet 地址系列 (AF_INET 或 AF_INET6) 。 如果AF_IRDA ai_family成员,则SOCK_STREAM是唯一支持的套接字类型。 |
|
支持数据报,即最大长度固定(通常很小)的无连接、不可靠缓冲区。 对 Internet 地址系列使用用户数据报协议 (UDP) (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
协议类型。 可能的选项特定于指定的地址系列和套接字类型。 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 成员的常见值,尽管许多其他值是可能的。
如果AF_IRDA ai_family成员,则ai_protocol必须为 0。
ai_addrlen
ai_addr 成员指向的缓冲区的长度(以字节 为单位 )。
ai_canonname
主机的规范名称。
ai_addr
指向 sockaddr 结构的指针。 每个返回的 addrinfoex3 结构中的 ai_addr 成员指向填充的套接字地址结构。 每个返回的 addrinfoex3 结构的长度(以字节为单位)在 ai_addrlen 成员中指定。
ai_blob
指向数据的指针,用于返回与地址列表以外的名称关联的特定于提供程序的命名空间信息。 必须在 ai_bloblen 成员中指定 ai_blob 指向的缓冲区的长度 (以字节为单位 )。
ai_bloblen
ai_blob 成员的长度(以字节为单位)。
ai_provider
指向特定命名空间提供程序的 GUID 的指针。
ai_next
指向链接列表中的下一个结构的指针。 此参数在链接列表的最后一个 addrinfoex3 结构中设置为 NULL。
ai_version
此结构的版本号。 当前用于此版本的结构的值为 3。
ai_fqdn
主机的完全限定域名。
ai_interfaceindex
接口索引,由IP_ADAPTER_ADDRESSES定义。GetAdaptersAddresses 中返回的 IfIndex 属性。
注解
Windows 8.1 和 Windows Server 2012 R2 支持 addrinfoex3 结构
当 addrinfoex3 中设置了 AI_EXTENDED | AI_FQDN | AI_CANONNAME 位时,GetAddrInfoExex函数使用 addrinfoex3 结构来保存主机地址信息。ai_flags通过 GetAddrInfoEx 传入的成员。hints 参数。 还必须设置 addrinfoex3。ai_interfaceindex 要检索其信息的接口的成员,并将 ai_version 为 3。
addrinfoex3 结构是 addrinfoex 结构的增强版本,可以返回主机的规范名称和完全限定的域名。 反过来,addrinfoex 是用于 getaddrinfo 和 GetAddrInfoW 函数的 addrinfo 和 addrinfoW 结构的增强版本。 GetAddrInfoEx 函数允许指定命名空间提供程序来解析查询。 若要与 IPv6 和 IPv4 协议一起使用,可以通过域名系统 (DNS) 、本地 主机 文件、电子邮件提供商 (NS_EMAIL 命名空间) 或其他命名机制进行。
ai_blob 成员中的 Blob 数据用于返回与名称关联的其他特定于提供程序的命名空间信息。 ai_blob 成员中的数据格式特定于特定的命名空间提供程序。 目前, NS_EMAIL 命名空间提供程序使用 blob 数据来提供其他信息。
定义 UNICODE 或 _UNICODE 时, addrinfoex3 将定义为 addrinfoex3W,即此结构的 Unicode 版本。 字符串参数定义为 PWSTR 数据类型,并使用 addrinfoex3W 结构。
如果未定义 UNICODE 或 _UNICODE, 则 addrinfoex3 将定义为 addrinfoex3A,即此结构的 ANSI 版本。 字符串参数的数据类型为 char * ,使用 addrinfoex3A 结构。
成功调用 GetAddrInfoEx 后,将在传递给 GetAddrInfoEx 函数的 ppResult 参数中返回 addrinfoex3 结构的链接列表。 可以按照每个返回的 addrinfoex3 结构的 ai_next 成员中提供的指针处理列表,直到遇到 NULL 指针。 在每个返回的 addrinfoex3 结构中, ai_family、 ai_socktype和 ai_protocol 成员对应于 套接字 或 WSASocket 函数调用中的相应参数。 此外,每个返回的 addrinfoex3 结构中的 ai_addr 成员指向填充的套接字地址结构,其长度在其ai_addrlen成员中指定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
标头 | ws2def.h |