我使用getaddrinfo在Windows上从C++进行DNS查询。我过去经常使用Windows,它工作得很好,但是当我将IPv6支持添加到我的软件中时,我切换到getaddrinfo。从那以后,我看到了以下情况:
我的问题是,有时getaddrinfo需要很长时间才能完成。getaddrinfo的典型响应只需几毫秒,但在10000次中大约需要1次,它需要更长的时间,在某些情况下大约15秒,但是有几次需要几分钟的时间。
我在服务器上运行了Wireshark,并分析了我的应用程序调试日志,并看到以下内容:
奇怪的是,实际的DNS查询只需要十分之一秒,但是getaddrinfo实际执行的时间要长得多。
许多用户都报告了这个问题,所以这不是我的机器特有的问题。
那么,getaddrinfo除了与DNS服务器联系之外,还能做什么呢?
编辑:
编辑2
发布于 2009-11-22 12:36:20
Windows有一个本地守护进程,用于进行DNS缓存。您对getaddrinfo()的调用被路由到该守护进程,该守护进程大概是在将查询提交到DNS服务器之前检查其缓存。
有关禁用缓存的详细信息,请参阅Windows知识库文章318803。
编辑的
在我看来,您的Windows 2003实例似乎没有为IPv6正确配置。一旦IPv6查找超时,它将返回到IPv4。知识库文章可能包括:
不幸的是,我无法访问任何Windows服务器,因此我无法亲自测试/复制。
https://stackoverflow.com/questions/1778546
复制相似问题