代码之家  ›  专栏  ›  技术社区  ›  Pavel Radzivilovsky

使用winsock在每个套接字上设置mss?

  •  2
  • Pavel Radzivilovsky  · 技术社区  · 14 年前

    听起来很疯狂,生活中有一些情况需要手动配置TCP堆栈参数,比如MSS。

    我看到它可以在机器范围内完成,例如, here . 但我需要一种基于每个TCP套接字的配置方法。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Nikolai Fetissov    14 年前

    那应该是标准的 setsockopt 具有 TCP_MAXSEG . 请记住,这必须在启动连接之前完成(即 connect listen )而TCP堆栈可能会根据路径mtu改变实际值。

        2
  •  0
  •   jay.lee    14 年前

    你可以试着打电话 setsockopt() 如图所示,在 this MSDN article . 但奇怪的是,tcp-maxseg不是一个有效的optname,无法提供给 getsockopt() . 所以也许它可以设置但不能检索?我想试试看它是否有效。

        3
  •  0
  •   Jie    8 年前

    我认为Windows可能不允许您调整每个插座的MSS。

    这是测试样本:
    打电话就行了 setsockopt 具有 TCP_MAXSEG .
    #include <ws2tcpip.h>

    `int mss = 512;`  
    `setsockopt(sock, IPPROTO_TCP, TCP_MAXSEG, (char*)&mss, sizeof(mss);`  
    

    把它放在前面 connect listen .

    我在Windows10上用VS2015测试了它。此代码可以通过VS2015中的编译,但无法运行。Windows将出错 WSAENOPROTOOPT 当它在运行时。