我试图在 Windows 计算机上复制实时应用程序,以便能够更轻松地进行调试和更改,但我遇到了延迟确认问题。我已经禁用了 nagle 并确认它提高了一点速度。当发送大量小数据包时,窗口不会立即 ACK 并延迟 200 毫秒。做了更多的研究,我发现this https://support.microsoft.com/en-us/help/328890/new-registry-entry-for-controlling-the-tcp-acknowledgment-ack-behavior。更改注册表值的问题在于,它将影响整个系统,而不仅仅是我正在使用的应用程序。无论如何,有没有办法在窗口系统上禁用延迟ACK,例如TCP_QUICKACK
从Linux使用setsockopt
?我尝试硬编码 12,但是得到了WSAEINVAL来自 WSAGetLastError。
我在 github 上看到一些开发人员提到使用SIO_TCP_SET_ACK_FREQUENCY
但我没有看到任何有关如何实际使用它的示例。
所以我尝试在下面做
#define SIO_TCP_SET_ACK_FREQUENCY _WSAIOW(IOC_VENDOR,23)
result = WSAIoctl(sock, SIO_TCP_SET_ACK_FREQUENCY, 0, 0, info, sizeof(info), &bytes, 0, 0);
我得到了WSA故障作为错误代码。请帮忙!
我在网上看到了一些参考资料TCP_QUICKACK
may实际上由 Winsock 支持setsockopt()
(选项 12),即使它没有记录在案,也没有在任何地方得到正式确认。
但是,关于您的实际问题,您的使用SIO_TCP_SET_ACK_FREQUENCY
失败是因为您没有提供任何输入缓冲区WSAIoctl()
设置实际频率值。尝试这样的事情:
int freq = 1; // can be 1..255, default is 2
result = WSAIoctl(sock, SIO_TCP_SET_ACK_FREQUENCY, &freq, sizeof(freq), NULL, 0, &bytes, NULL, NULL);
注意SIO_TCP_SET_ACK_FREQUENCY
适用于 Windows 7 / Server 2008 R2 及更高版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)