【问题标题】:InternetOpen - first call slow on some machinesInternetOpen - 在某些机器上第一次调用很慢
【发布时间】:2015-08-12 18:46:03
【问题描述】:

我对使用 wininet.dll 函数 InternetOpen 的应用程序有疑问。

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

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

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

我相当有信心这与代码本身没有任何关系。它是用 Delphi XE5 编写的。事实上,如果我使用一些也调用 InternetOpenW 函数的组件,它们在受影响的机器上也会出现同样的问题。

受影响的机器一直受到影响,“正常”的机器总是可以正常工作。 IE 本身在受影响的机器上看起来并不慢。

有什么想法吗?

谢谢!

编辑回应戴维·钦

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

我没有注意到任何服务器本身挂起。但是,我们网络的外部 IP 地址有一些 TCP 数据包。就好像这些调用正在延迟/阻塞应用程序的流量。

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

这是我提到的 TCP 数据包的屏幕截图:

任何想法从这里去哪里,恐怕我不是网络专家。

谢谢!

【问题讨论】:

  • 运行 Wireshark 或 MS 消息分析器,查看正在访问的服务器需要像这样超时。
  • @David Ching:感谢您的建议。我发现一些对我来说似乎“奇怪”的数据包(请参阅我的编辑),但我不知道如何修复它,或者它是否相关。有什么想法吗?
  • 在受影响的机器上打开控制面板中的 Internet 设置,查看是否为您的备份站点设置了代理。 WinInet 和 IE 都使用这些设置。不过,非常奇怪的 IE 从未受到影响。
  • @David Ching:不,那里没有设置代理。我什至重置了整个选项,恢复到 IE 8 并升级回来,浏览了每个版本的 IE,直到 IE 11。困惑...
  • 您可以使用API Monitor 查看您的应用程序调用的 WinInet 和较低级别的 API,并将它们与 IE 调用它们的方式进行比较。也许您需要调用InternetSetOption 来设置一些特定于连接的设置。

标签: windows winapi delphi-xe5


【解决方案1】:

好的,原来问题与我网络上的 IPv6 有关。不知道为什么,但是某些机器上的 wininet 调用会首先尝试 IPv6,如果 IPv6 失败,则只会使用 IPv4。

我们的 ISP 不支持 IPv6,所以第一次尝试当然失败了。

感谢 David Ching 向我指出导致发现的工具 :o)

【讨论】:

  • 实际上,我还没有弄清楚那部分。目前,由于我的 ISP 不支持 IPv6,我只是关闭了路由器上的 DHCP-IPv6 服务,以及双栈 IP 选项(我使用 Cisco RV320)。现在这已经足够了,尽管它对我来说似乎并不那么优雅。我已经阅读了一些有关路由优先级的设置,我将对这些设置进行测试。我会留下更新:o)
猜你喜欢
  • 1970-01-01
  • 2017-05-23
  • 2013-12-28
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 2012-01-27
  • 1970-01-01
相关资源
最近更新 更多