听起来很疯狂,生活中有些情况需要手动配置TCP堆栈参数,例如MSS。
我看到它可以在机器范围内完成,例如,here。但是我需要一种基于per-tcp-socket配置它的方法。
答案 0 :(得分:1)
这应该是标setsockopt
TCP_MAXSEG
。请记住,必须在启动连接之前(即connect
或listen
之前)完成此操作,并且TCP堆栈可能会根据路径MTU更改实际值。
答案 1 :(得分:0)
您可以尝试使用TCP_MAXSEG调用setsockopt()
,因为隐含在this MSDN article的底部。但奇怪的是,TCP_MAXSEG不是提供给getsockopt()
的有效optname。也许它可以设置但不能检索?我想试一试,看看它是否有效。
答案 2 :(得分:0)
我认为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
。