Usando SIO_ADDRESS_LIST_SORT

O SIO_ADDRESS_LIST_SORT IOCTL permite que os desenvolvedores de aplicativos classifiquem uma lista de endereços de destino IPv6 e IPv4 para determinar o melhor endereço disponível para fazer uma conexão. O SIO_ADDRESS_LIST_SORT IOCTL tem suporte no Windows XP e posterior.

No Windows Vista e posteriores, a função CreateSortedAddressPairs usa uma lista fornecida de endereços de destino IP potenciais, emparelha os endereços de destino com os endereços IP locais do computador host e classifica os pares de acordo com qual par de endereços é mais adequado para comunicação entre os dois pares. A função CreateSortedAddressPairs deve ser usada em vez do SIO_ADDRESS_LIST_SORT IOCTL no Windows Vista e posterior.

As seções a seguir descrevem considerações de uso para SIO_ADDRESS_LIST_SORT.

Parâmetros

O buffer passado para SIO_ADDRESS_LIST_SORT é uma estrutura SOCKET_ADDRESS_LIST . Cada SOCKET_ADDRESS na lista deve estar no formato SOCKADDR_IN6.

O SIO_ADDRESS_LIST_SORT IOCTL classifica endereços IPv6 e IPv4 no Windows Vista e posteriores. Todos os endereços IPv4 na lista a serem classificados devem estar no formato de endereço IPv6 mapeado por IPv4. Para obter mais informações sobre o formato de endereço IPv6 mapeado por IPv4, consulte Dual-Stack Sockets.

No Windows Server 2003 e no Windows XP, SIO_ADDRESS_LIST_SORT classifica apenas endereços IPv6. Não há suporte para endereços IPv4 no formato de endereço IPv6 mapeado para IPv4.

Na saída, o membro iAddressCount da estrutura SOCKET_ADDRESS_LIST poderá ser menor do que na entrada se o código IOCTL determinar que alguns endereços de destino são inválidos.

Determinação de classificação

A ordem de classificação para endereços IPv6 para o SIO_ADDRESS_LIST_SORT IOCTL baseia-se na tabela de política de prefixo. A tabela de política de prefixo é configurada usando o utilitário de linha de comando Netsh.exe . Os seguintes snippets de linha de comando ilustram os comandos básicos de configuração da tabela de política de prefixo 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

Observação

No Windows Server 2003 e no Windows XP, o primeiro comando netsh listado acima foi o seguinte. Todos os outros comandos relacionados são os mesmos.

 

netsh interface ipv6 show prefixpolicy

A ordenação de endereços também é determinada por um algoritmo descrito no RFC 3484 em Seleção de Endereço Padrão para Protocolo de Internet versão 6 (IPv6) publicado pelo IETF. Para obter mais informações, consulte https://www.ietf.org/rfc/rfc3484.txt. (Esse recurso só pode estar disponível em inglês.)

O SIO_ADDRESS_LIST_SORT IOCTL classifica os endereços da melhor para a pior, e preenche sin6_scope_id membros, se necessário. Para endereços locais do site, SIO_ADDRESS_LIST_SORT preenche a ID de escopo ou remove o endereço.

O SIO_ADDRESS_LIST_SORT IOCTL ignora o endereço de origem associado ao soquete e classifica apenas pela lista de endereços de destino passada como um parâmetro.

A função CreateSortedAddressPairs deve ser usada em vez da SIO_ADDRESS_LIST_SORT IOCTL no Windows Vista e posteriores. A função CreateSortedAddressPairs retorna uma lista de pares de endereços que contém um endereço de origem local e um endereço de destino. Isso fornece a um aplicativo o endereço de origem correto a ser usado para cada endereço de destino. Um aplicativo também pode filtrar os resultados procurando um endereço de origem específico. nos resultados.

Requisitos

O SIO_ADDRESS_LIST_SORT IOCTL é definido no arquivo de cabeçalho Winsock2.h . No Microsoft Windows Software Development Kit (SDK) lançado para Windows Vista e posterior, a organização de arquivos de cabeçalho foi alterada e SIO_ADDRESS_LIST_SORT IOCTL é definido no arquivo de cabeçalho Ws2def.h . Observe que o arquivo de cabeçalho Ws2def.h é incluído automaticamente em Winsock2.h e nunca deve ser usado diretamente.

O SIO_ADDRESS_LIST_SORT IOCTL tem suporte no Windows XP e posterior.

CreateSortedAddressPairs