Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo risolve un problema in cui viene visualizzato un errore di WSAHOST_NOT_FOUND quando GetAddrInfo
viene chiamato dopo un'altra chiamata per la famiglia di AF_INET6.
Si applica a: Windows 10 - tutte le edizioni
Numero KB originale: 4057932
Sintomi
Prendi in considerazione lo scenario seguente:
- Usare un nome flat senza suffissi per eseguire una query per un nome host.
- Si dispone di un elenco di ricerca suffisso e questo nome host è risolvibile tramite uno di questi suffissi diversi dall'ultimo suffisso nell'elenco.
- Si esegue
GetAddrInfo
prima di tutto per la famiglia di AF_INET6 e quindi si esegue tale comando per la famiglia di AF_INET.
In questo scenario, la funzione non riesce a risolvere il nome host fornito e viene visualizzato il messaggio di errore " WSAHOST_NOT_FOUND (11001)".
Ad esempio, si dispone dell'ambiente seguente:
- Elenco di ricerca suffisso:
contoso.com
,foo.contoso.com
,bar.contoso.com
- Nome host che prova a essere risolto: test
- Host DNS Record A presente in:
foo.contoso.com
Quando si tenta di eseguire il codice di esempio seguente, le chiamate hanno esito negativo con l'errore 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)
Soluzione alternativa
Questo problema può essere evitato usando i metodi seguenti. Il problema non si verifica se:
- Usare AF_UNSPEC per la famiglia e consentire al codice di determinare automaticamente i risultati A/AAAA.
- Inserire il suffisso con l'host corrispondente Record A come ultima voce nell'elenco di ricerca del suffisso.
- Disabilitare la memorizzazione nella cache negativa nel client DNS.
- Passare il nome host completo da risolvere.
La prima opzione è il metodo consigliato, in quanto di solito non è necessario eseguire le chiamate per ogni famiglia, e Windows è molto meglio ottimizzato per restituire il miglior set di risultati possibile per entrambe le famiglie.