Compartir a través de


GetAddrInfo produce el error 11001 cuando se produjo una llamada anterior para la familia de AF_INET6 en Windows

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.