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


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

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

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

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

Параметры

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

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

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

В выходных данных элемент 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 о выборе адреса по умолчанию для протокола 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 игнорирует исходный адрес, привязанный к сокету, и сортирует только по списку адресов назначения, переданного в качестве параметра.

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

Требования

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

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

CreateSortedAddressPairs