Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se soluciona un problema en el que se recibe un error de WSAHOST_NOT_FOUND cuando GetAddrInfo
se llama a después de otra llamada para la familia de AF_INET6.
Se aplica a todas las ediciones de Windows 10
Número de KB original: 4057932
Síntomas
Considere el caso siguiente:
- Use un nombre plano sin sufijos para ejecutar una consulta para un nombre de host.
- Tiene una lista de búsqueda de sufijos y este nombre de host se puede resolver a través de uno de estos sufijos distintos del último sufijo de la lista.
- Primero se ejecuta para la familia AF_INET6 y, a continuación, se ejecuta
GetAddrInfo
ese comando para la familia AF_INET.
En este escenario, la función no puede resolver el nombre de host proporcionado y recibe el mensaje de error "WSAHOST_NOT_FOUND (11001)".
Por ejemplo, tiene el siguiente entorno:
- Lista de búsqueda de sufijos:
contoso.com
,foo.contoso.com
,bar.contoso.com
- Nombre de host que intenta resolver: prueba
- Registro A de DNS de host presente en:
foo.contoso.com
Al intentar ejecutar el código de ejemplo siguiente, las llamadas producen el error 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)
Solución alternativa
Este problema se puede evitar mediante los métodos siguientes. El problema no se producirá si:
- Use AF_UNSPEC para la familia y deje que nuestro código determine los resultados de A/AAAA automáticamente.
- Coloque el sufijo con el registro A del host coincidente como la última entrada de la lista de búsqueda de sufijos.
- Deshabilite el almacenamiento en caché negativo en el cliente DNS.
- Pase el nombre de host completo que se va a resolver.
La primera opción es el método recomendado, ya que normalmente no es necesario realizar las llamadas por familia, y Windows está mucho mejor optimizado para devolver el mejor conjunto de resultados posible para ambas familias.