InternetOpen - 在某些机器上首先调用缓慢

时间:2015-08-12 18:46:04

标签: windows winapi delphi-xe5

我遇到了使用wininet.dll函数InternetOpen的应用程序的问题。

简单地说,在某些机器上,第一次调用InternetOpenW需要很长时间才能返回(20到60秒)。 在其他机器上它几乎是瞬间的。

到目前为止,这只发生在Windows 7机器上,我尝试过的所有Windows 8计算机都没有问题,但我只能访问3 ... Windows 7机器设置非常相似,虽然不完全相同:Windows 7旗舰版64位,SP1,IE 11(wininet.dll版本11.0.9600.17840)。我还检查了ProxyEnable,ProxyServer和ProxyOverride(InternetOpen检查,取决于参数)的注册表值,并且它们匹配(此外,不使用代理)。

我确保所有机器都没有病毒和恶意软件。我确保wininet.dll是相同的版本,比较运行Windows NT服务的列表,尝试从安全模式。 “受影响”的机器没有区别。

我相信这与代码本身没有任何关系。它是用Delphi XE5编写的。事实上,如果我使用一些也称为InternetOpenW功能的组件,它们会在受影响的计算机上出现相同的问题。

受影响的机器一直受到影响,“普通”机器总能正常工作。 IE本身在受影响的计算机上看起来并不慢。

有什么想法吗?

谢谢!

编辑对David CHING的回应

感谢您的提示。我在受影响和未受影响的计算机上安装了Wireshark,并将结果与​​向maps.googleapi.com服务器发出HTTPS请求的简单应用进行了比较。

我没有发现任何服务器本身悬挂。但是,我们网络的外部IP地址有一些TCP数据包。好像这些呼叫正在延迟/阻止应用程序的流量。

奇怪的是,目前尚未使用目标IP地址 - 我使用的Cisco rv320路由器允许双WAN连接。 IP地址是备份互联网服务,但此刻它没有连接到路由器,事实上,此时没有设置该连接,因此路由器没有(或至少不应该)了解它。该地址已在3周前使用,当时我们的主要互联网连接失败(但之后路由器已重新配置)。 此外,如果问题来自路由器,我希望网络上的所有机器都有相同的问题,但事实并非如此 - 来自“未受影响”机器的wireshark捕获不会显示这些数据包(至少在少数几个我捕获的秒数。)

这是一个屏幕截图,显示我提到的TCP数据包: enter image description here

任何想法从哪里开始,我都不是网络专家。

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,事实证明这个问题与我网络上的IPv6有关。不知道为什么,但是某些机器上的wininet调用首先尝试IPv6,如果IPv6失败则只返回IPv4。

我们的ISP不支持Ipv6,因此当然首次尝试失败。

感谢David Ching指出了导致这一发现的工具:o)