WIndows 2012上的插座开启速度非常慢

时间:2015-05-22 17:46:17

标签: sockets vb6 windows2012

我正在开发一个使用套接字与各种设备通信的传统VB6应用程序。在2012系统上,我们注意到在不同域上的多个系统上调用winSock.Connect到大约9秒被触发的连接事件之间的时间。在2008 R2或更低版本的系统上,呼叫和被触发事件之间的间隔为1-3毫秒。

之前有没有人遇到这个问题,或者对可能导致这种情况的任何想法有什么想法?

由于

编辑:我已经对Wireshark进行了一些窥探,发现前几次TCP传输没有连接并被重新传输,不确定是否有帮助

2 个答案:

答案 0 :(得分:0)

关于Winsock控件没有什么特别的“特殊”,它只是API上的一个薄包装器。唯一值得注意的是它是32位的,必须在WOW64内运行。

您可能正在做一些有趣的事情或使用winsock API的所有32位程序都应该看到相同的问题。

也许您在此服务器上有名称解析问题?

答案 1 :(得分:0)

经过深入挖掘后,我最终找到了答案。

从Windows Server 2012开始,Microsoft启用了称为显式拥塞通知(ECN)的TCP扩展。这允许在丢失数据包的情况下端到端地通知网络拥塞。在TCP数据包上启用此方法的方法是通过标志,该标志在ECN(RFC 3168(2001))的定义中定义。

我发生的事情是,我的应用程序谈到的设备较旧,并且不支持ECN标志。当他们收到启用了该标志的数据包时,他们将不会确认传输,从而导致服务器超时。在两次传输失败后,看起来Windows关闭了ECN标志,设备确认了数据包。

我禁用了ECN,从管理员命令提示符运行以下命令:

netsh interface tcp set global ecncapability=disabled