我使用getaddrinfo在Windows上从C ++进行DNS查询。 我曾经使用的Windows API的DnsQuery和工作正常,但是当我的软件添加IPv6支持我切换到getaddrinfo。 从那以后,我看到了以下几点:
我的问题是有时getaddrinfo需要很长时间才能完成。 来自getaddrinfo的典型响应只需要几毫秒,但大约是10000次中的1次,需要更长的时间,有些情况下大约需要15秒,但是有几种情况需要几分钟时间。
我已经在服务器上运行Wireshark并分析了我的应用程序debugging日志,并看到以下内容:
这里奇怪的是,实际的DNS查询只需要十分之一秒,但getaddrinfo实际执行的时间要长得多。
这个问题已经被很多用户所报道,所以这不是我的机器特有的。
那么getaddrinfo做什么比联系DNS服务器更多?
编辑:
编辑2
Windows有一个DNS缓存的本地守护进程。 您对getaddrinfo()的调用将被路由到该守护进程,该守护进程可能会在将查询提交给DNS服务器之前检查其缓存。
有关禁用缓存的更多信息,请参阅Windows知识库文章318803 。
将帖子
这听起来好像你的Windows server 2003实例配置不正确的IPv6。 一旦IPv6查找超时,它将回落到IPv4。 知识库文章可能有助于包括:
不幸的是,我没有访问任何Windows服务器,所以我不能自己测试/复制这个。