Respuesta lenta de getaddrinfo

Estoy usando getaddrinfo para hacer consultas de DNS desde C ++ en Windows. Solía ​​usar la API de Windows DnsQuery y funcionó bien, pero al agregar soporte de IPv6 a mi software, cambié a getaddrinfo. Desde entonces, he visto lo siguiente:

Mi problema es que algunas veces getaddrinfo tarda mucho tiempo en completarse. La respuesta típica de getaddrinfo toma solo unos pocos milisegundos, pero aproximadamente 1 vez de cada 10000, lleva más tiempo, en algunos casos alrededor de 15 segundos, pero ha habido varios casos en los que toma varios minutos.

He ejecutado Wireshark en el servidor y he analizado los registros de depuración de mis aplicaciones y veo lo siguiente:

Llamo a la función getaddrinfo.15 segundos después, mi máquina consulta el servidor DNS.Algunos milisegundos más tarde, recibo la respuesta del servidor DNS.

Lo extraño aquí es que la consulta de DNS real solo toma una décima de segundo, pero el tiempo de ejecución de getaddrinfo en realidad es mucho más largo.

El problema ha sido reportado por muchos usuarios, por lo que no es algo específico de mi máquina.

Entonces, ¿qué hace getaddrinfo más que ponerse en contacto con el servidor DNS?

Editar:

El problema ha ocurrido con varias direcciones. Si intento reproducir el problema utilizando estas direcciones, el problema no se produce.He hecho algo estúpido. En cada consulta de DNS, se analiza el etc / services. Sin embargo, eso no explica un retraso en varios minutos. (gracias D.Shawley)

Editar 2

Un tipo de consultas DNS realizadas por mi software son las consultas DNSBL anti-spam. El registro de un usuario me mostró que la búsqueda de ip.address1.example.com siempre pareció tomar exactamente 2039 segundos, mientras que la búsqueda de another.ip.address.example.com siempre tomó exactamente 1324 segundos. El día después de eso, las búsquedas para esas direcciones estaban bien. Al principio pensé que los autores de DNS BL habían puesto algún tipo de tiempo de espera de su lado. Pero si este era el problema principal, ¿getaddrinfo debería haberse agotado antes?

Respuestas a la pregunta(1)

Su respuesta a la pregunta