使用winsock在每个套接字的基础上设置MSS?

时间:2010-11-09 14:44:37

标签: winapi sockets tcp winsock mss

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

我看到它可以在机器范围内完成,例如,here。但是我需要一种基于per-tcp-socket配置它的方法。

3 个答案:

答案 0 :(得分:1)

这应该是标setsockopt TCP_MAXSEG。请记住,必须在启动连接之前(即connectlisten之前)完成此操作,并且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);`  

connectlisten之前设置。

我在windows10上使用vs2015进行了测试。此代码可以在VS2015中传递编译,但无法运行。 Windows将在运行时发出错误WSAENOPROTOOPT