[英]C++ Disable Delayed Ack on Windows
我试图在Windows计算机上复制实时应用程序,以便进行调试并使更改变得更容易,但是我遇到了“延迟确认”问题。 我已经禁用了nagle,并确认它可以提高速度。 当发送大量小数据包时,窗口不会立即进行确认并将其延迟200毫秒。 在做更多的研究时,我遇到了这个问题 。 更改注册表值的问题是,它将影响整个系统,而不仅仅是我正在使用的应用程序。 无论如何,使用setsockopt
从Linux禁用诸如TCP_QUICKACK
类的窗口系统上的延迟ACK? 我尝试硬编码12,但从WSAGetLastError获得了WSAEINVAL 。
我在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);
并且我得到了WSAEFAULT作为错误代码。 请帮忙!
我在线上已经看到一些参考资料,即使未记录或在任何地方正式确认,Winsock TCP_QUICKACK
可能通过setsockopt()
(选择12)支持TCP_QUICKACK
。
但是,关于您的实际问题,您对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);
请注意,Windows 7 / Server 2008 R2和更高版本中提供了SIO_TCP_SET_ACK_FREQUENCY
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.