增加特定套接字的TCP接收窗口

时间:2010-05-05 14:32:39

标签: c++ windows sockets winsock2

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

根据MSFT's documents,方法是

  

调用Windows套接字功能   setsockopt,用于设置接收   每个插座的窗口。

但是在setsockopt中,提到了SO_RCVBUF:

  

指定每个套接字缓冲区的总数   为接收预留的空间。这是   与SO_MAX_MSG_SIZE无关并且确实如此   不一定对应于大小   TCP接收窗口。

有可能吗?怎么样?

感谢。

3 个答案:

答案 0 :(得分:5)

SO_MAX_MSG_SIZE用于UDP。这是来自MSDN

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

它也无法设置

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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