使用 SIO_ADDRESS_LIST_SORT
SIO_ADDRESS_LIST_SORT IOCTL 允许应用程序开发人员对 IPv6 和 IPv4 目标地址列表进行排序,以确定用于建立连接的最佳地址。 SIO_ADDRESS_LIST_SORT IOCTL 在 Windows XP 及更高版本上受支持。
在 Windows Vista 及更高版本上, CreateSortedAddressPairs 函数获取提供的潜在 IP 目标地址列表,将目标地址与主机的本地 IP 地址配对,并根据最适合两个对等机之间的通信的地址对排序。 应在 Windows Vista 及更高版本上使用 CreateSortedAddressPairs 函数而不是 SIO_ADDRESS_LIST_SORT IOCTL。
以下部分介绍 SIO_ADDRESS_LIST_SORT的使用注意事项。
参数
传递给 SIO_ADDRESS_LIST_SORT 的 缓冲区是 SOCKET_ADDRESS_LIST 结构。 列表中的每个 SOCKET_ADDRESS 都必须采用SOCKADDR_IN6格式。
SIO_ADDRESS_LIST_SORT IOCTL 对 Windows Vista 及更高版本的 IPv6 和 IPv4 地址进行排序。 列表中要排序的任何 IPv4 地址都必须采用 IPv4 映射的 IPv6 地址格式。 有关 IPv4 映射的 IPv6 地址格式的详细信息,请参阅 双堆栈套接字。
在 Windows Server 2003 和 Windows XP 上, SIO_ADDRESS_LIST_SORT 仅对 IPv6 地址进行排序。 不支持采用 IPv4 映射 IPv6 地址格式的 IPv4 地址。
输出时,如果 IOCTL 代码确定某些目标地址无效,SOCKET_ADDRESS_LIST 结构的 iAddressCount 成员可能小于输入时。
排序确定
SIO_ADDRESS_LIST_SORT IOCTL 的 IPv6 地址的排序顺序基于前缀策略表。 前缀策略表是使用 Netsh.exe 命令行实用工具配置的。 以下命令行代码段演示了基本 Netsh.exe 前缀策略表配置命令:
netsh interface ipv6 show prefixpolicies
netsh interface ipv6 add prefixpolicy ::/96 3 4
netsh interface ipv6 delete prefixpolicy ::/96
netsh interface ipv6 set prefixpolicy ::/96 3 4
注意
在 Windows Server 2003 和 Windows XP 上,上面列出的第一个 netsh 命令如下所示。 所有其他相关命令都是相同的。
netsh interface ipv6 show prefixpolicy
地址排序还由 IETF 发布的 Internet 协议版本 6 (IPv6) 的 RFC 3484 中概述的算法确定。 有关详细信息,请参阅 https://www.ietf.org/rfc/rfc3484.txt。 (此资源可能仅提供英语。)
SIO_ADDRESS_LIST_SORT IOCTL 对地址进行从最佳到最差排序,并根据需要填写sin6_scope_id成员。 对于站点本地地址,SIO_ADDRESS_LIST_SORT填写范围 id 或删除地址。
SIO_ADDRESS_LIST_SORT IOCTL 忽略绑定到套接字的源地址,仅按作为参数传递的目标地址列表进行排序。
应在 Windows Vista 及更高版本上使用 CreateSortedAddressPairs 函数而不是 SIO_ADDRESS_LIST_SORT IOCTL。 CreateSortedAddressPairs 函数返回包含本地源地址和目标地址的地址对列表。 这为应用程序提供了用于每个目标地址的正确源地址。 应用程序还可以通过查找特定的源地址来筛选结果。 。
要求
SIO_ADDRESS_LIST_SORT IOCTL 在 Winsock2.h 头文件中定义。 在为 Windows Vista 及更高版本发布的 Microsoft Windows 软件开发工具包 (SDK) 上,头文件的组织已更改, SIO_ADDRESS_LIST_SORT IOCTL 在 Ws2def.h 头文件中定义。 请注意, Ws2def.h 头文件自动包含在 Winsock2.h 中,不应直接使用。
SIO_ADDRESS_LIST_SORT IOCTL 在 Windows XP 及更高版本上受支持。
相关主题