Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo aborda um problema no qual você recebe um erro WSAHOST_NOT_FOUND quando o GetAddrInfo
é chamado após outra chamada para a família AF_INET6.
Aplicável ao: Windows 10 - todas as edições
Número original do KB: 4057932
Sintomas
Considere o cenário a seguir.
- Você usa um nome simples sem sufixos para executar uma consulta a um nome de host.
- Você tem uma lista de pesquisa de sufixos, e esse nome de host pode ser resolvido por meio de um desses sufixos diferentes do último sufixo da lista.
- Você executa
GetAddrInfo
primeiro para a família AF_INET6 e, em seguida, executa esse comando para a família AF_INET.
Nesse cenário, a função não pode resolver o nome do host fornecido e você recebe a mensagem de erro " WSAHOST_NOT_FOUND (11001)".
Por exemplo, você tem o seguinte ambiente:
- Lista de pesquisa de sufixos:
contoso.com
,foo.contoso.com
,bar.contoso.com
- Nome do host tentando ser resolvido: teste
- DNS do host Um registro presente em:
foo.contoso.com
Quando você tenta executar o código de exemplo a seguir, as chamadas falham com o erro 11001.
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = 0;
hints.ai_family = AF_INET6;
getaddrinfo("test", NULL, &hints, &res)
hints.ai_family = AF_INET;
getaddrinfo("test", NULL, &hints, &res)
Solução alternativa
Esse problema pode ser evitado usando os métodos a seguir. O problema não ocorrerá se você:
- Use AF_UNSPEC para a família e deixe nosso código determinar os resultados A/AAAA para você.
- Coloque o sufixo com o registro A do host correspondente como a última entrada na lista de pesquisa de sufixos.
- Desative o cache negativo no cliente DNS.
- Passe o nome de host totalmente qualificado a ser resolvido.
A primeira opção é o método recomendado, pois geralmente não há necessidade de fazer as chamadas por família, e o Windows é muito melhor otimizado para retornar o melhor conjunto possível de resultados para ambas as famílias.