繁体   English   中英

Windows上的C ++禁用延迟确认

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM