Поделиться через


Использование SIO_ADDRESS_LIST_SORT

SIO_ADDRESS_LIST_SORT IOCTL позволяет разработчикам приложений сортировать список адресов назначения IPv6 и IPv4, чтобы определить лучший доступный адрес для подключения. SIO_ADDRESS_LIST_SORT IOCTL поддерживается в Windows XP и более поздних версиях.

В операционной системе Windows Vista и более поздних версиях функция CreateSortedAddressPairs принимает указанный список потенциальных IP-адресов назначения, объединяет эти адреса с локальными IP-адресами хост-компьютера в пары и сортирует их в соответствии с тем, какая пара адресов наилучшим образом подходит для обмена данными между двумя одноранговыми узлами. Функцию CreateSortedAddressPairs следует использовать вместо SIO_ADDRESS_LIST_SORT IOCTL в Windows Vista и более поздних версиях.

В следующих разделах описываются рекомендации по использованию для SIO_ADDRESS_LIST_SORT.

Параметры

Буфер, переданный в SIO_ADDRESS_LIST_SORT, является структурой SOCKET_ADDRESS_LIST. Каждый SOCKET_ADDRESS в списке должен быть в формате SOCKADDR_IN6.

SIO_ADDRESS_LIST_SORT IOCTL сортирует адреса IPv6 и IPv4 в Windows Vista и последующих версиях. Все адреса IPv4 в списке, которые нужно отсортировать, должны быть в формате IPv6-адреса, сопоставленного с IPv4. Дополнительные сведения о формате IPv4-адресов, сопоставленных с IPv6, см. в разделе Dual-Stack Сокеты.

В Windows Server 2003 и Windows XP SIO_ADDRESS_LIST_SORT сортирует только IPv6-адреса. Адреса IPv4 в формате IPv4-сопоставленного IPv6 не поддерживаются.

В выходных данных элемент iAddressCount структуры SOCKET_ADDRESS_LIST может быть меньше входных данных, если код IOCTL определяет, что некоторые адреса назначения недопустимы.

Определение порядка сортировки

Порядок сортировки адресов IPv6 для SIO_ADDRESS_LIST_SORT IOCTL основан на таблице политик префикса. Таблица политики префикса настраивается с помощью служебной программы командной строки 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

Порядок адресов также определяется алгоритмом, описанным в RFC 3484 на выбор адресов по умолчанию для протокола Интернета версии 6 (IPv6) опубликованных IETF. Дополнительные сведения см. в https://www.ietf.org/rfc/rfc3484.txt. (Этот ресурс может быть доступен только на английском языке.)

При необходимости SIO_ADDRESS_LIST_SORT IOCTL сортирует адреса от лучшего до худшего и заполняет sin6_scope_id членов. Для адресов, локальных для сайта, SIO_ADDRESS_LIST_SORT либо заполняет идентификатор области, либо удаляет адрес.

SIO_ADDRESS_LIST_SORT IOCTL игнорирует исходный адрес, привязанный к сокету, и выполняет сортировку только по целевому списку адресов, переданного в качестве параметра.

Функцию CreateSortedAddressPairs следует использовать вместо SIO_ADDRESS_LIST_SORT IOCTL в Windows Vista и более поздних версиях. Функция CreateSortedAddressPairs возвращает список пар адресов, содержащих локальный исходный адрес и целевой адрес. Это дает приложению правильный исходный адрес, используемый для каждого целевого адреса. Приложение также может отфильтровать результаты, обращая внимание на конкретный исходный адрес. в результатах.

Требования

SIO_ADDRESS_LIST_SORT IOCTL определяется в заголовочном файле Winsock2.h. В пакете SDK, выпущенном для Microsoft Windows Vista и более поздних версий, организация файлов заголовков изменилась, и SIO_ADDRESS_LIST_SORT IOCTL определён в файле заголовка Ws2def.h. Обратите внимание, что файл заголовка Ws2def.h автоматически включается в Winsock2.hи не следует использовать напрямую.

SIO_ADDRESS_LIST_SORT IOCTL поддерживается в Windows XP и более поздних версиях.

СоздатьУпорядоченныеПарыАдресов