8

如何增加特定套接字的 TCP 接收窗口?- 我知道如何通过设置注册表项 TcpWindowSize 对所有套接字执行此操作,但是如何为特定的套接字执行此操作?

根据MSFT 的文件,方法是

调用 Windows 套接字函数 setsockopt,该函数基于每个套接字设置接收窗口。

但是在setsockopt中,提到了 SO_RCVBUF :

指定为接收保留的每个套接字的总缓冲区空间。这与 SO_MAX_MSG_SIZE 无关,也不一定对应 TCP 接收窗口的大小。

那么有可能吗?如何?

谢谢。

4

3 回答 3

5

SO_MAX_MSG_SIZE用于UDP。这里来自MSDN

SO_MAX_MSG_SIZE - 返回协议支持的面向消息的套接字的最大出站消息大小。对于面向流的套接字没有意义。

它也是不可设置的。

对于 TCP,只需使用SO_(SND|RCV)BUF.

于 2010-05-05T16:26:07.697 回答
1

我相当确定 SO_RCVBUF 是您想要的。第一个链接说 SO_RCVBUF 在确定 TCP 窗口大小方面具有最高优先级,高于系统上设置的任何内容。从我阅读的方式来看,我认为所有第二部分都在说 SO_RCVBUF 大小不必与系统接收窗口大小相匹配。换句话说,它可以是您设置的不同大小。

于 2010-05-05T15:05:52.393 回答
0

您需要小心调整并测试结果。Windows Vista 及更高版本具有智能自适应窗口大小自动调整功能,可专门调整窗口大小以在 LAN 和长胖网络(如 3G 和高损耗网络)上正常工作。自己设置窗口大小将覆盖它,这样窗口就不能再自动调整窗口大小。如果您需要在延迟特别高的网络(例如蜂窝网络)上运行,这可能会损害您的性能。

于 2010-05-06T19:34:10.053 回答