gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:47:55 24 4
gpt4 key购买 nike

我正在尝试在 Windows 计算机上复制一个实时应用程序,以便能够更轻松地进行调试和更改,但我遇到了延迟确认问题。我已经禁用了 nagle 并确认它稍微提高了速度。当发送大量小数据包时,窗口不会立即确认并延迟 200 毫秒。对此进行了更多研究,我遇到了 this .更改注册表值的问题在于,它会影响整个系统,而不仅仅是我正在使用的应用程序。无论如何,是否可以使用 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 作为错误代码。请帮忙!

最佳答案

我在网上看到了一些引用资料,指出 TCP_QUICKACK 可能 实际上是通过 setsockopt() (opt 12) 被 Winsock 支持的,即使它没有记录在案,也没有在任何地方得到官方确认。

但是,关于您的实际问题,您对 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 及更高版本中可用。

关于C++ 在 Windows 上禁用延迟确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com