听起来很疯狂,生活中有些情况需要手动配置 TCP 堆栈参数,例如 MSS。
我看到它可以按照描述在机器范围内完成,例如,here。但我需要一种基于每个 tcp-socket 配置它的方法。
这应该是标准setsockopt
的TCP_MAXSEG
。请记住,这必须在启动连接之前完成(即在connect
或之前listen
),并且 TCP 堆栈可能会根据路径 MTU 更改实际值。
您可以尝试使用 TCP_MAXSEG 调用,这在 MSDN 文章setsockopt()
的底部暗示是可能的。但奇怪的是 TCP_MAXSEG 不是提供给. 所以也许它可以设置但不能检索?我想试试看它是否有效。getsockopt()
我认为 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中可以通过编译,但是不能运行。WindowsWSAENOPROTOOPT
在运行时会报错。