【问题标题】:Increase the TCP receive window for a specific socket增加特定套接字的 TCP 接收窗口
【发布时间】:2010-05-05 14:32:39
【问题描述】:

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

根据MSFT's documents,方式是

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

但在setsockopt 中,提到了 SO_RCVBUF :

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

那么有可能吗?怎么样?

谢谢。

【问题讨论】:

    标签: c++ windows sockets winsock2


    【解决方案1】:

    SO_MAX_MSG_SIZE 用于 UDP。来自MSDN

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

    它也不可设置

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢。有没有办法设置 SO_MAX_MSG_SIZE?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 2013-03-13
        相关资源
        最近更新 更多