3

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

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

4

3 回答 3

2

这应该是标准setsockoptTCP_MAXSEG。请记住,这必须在启动连接之前完成(即在connect或之前listen),并且 TCP 堆栈可能会根据路径 MTU 更改实际值。

于 2010-11-09T20:19:32.873 回答
0

您可以尝试使用 TCP_MAXSEG 调用,这在 MSDN 文章setsockopt()的底部暗示是可能的。但奇怪的是 TCP_MAXSEG 不是提供给. 所以也许它可以设置但不能检索?我想试试看它是否有效。getsockopt()

于 2010-11-09T15:01:31.817 回答
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中可以通过编译,但是不能运行。WindowsWSAENOPROTOOPT在运行时会报错。

于 2016-11-28T06:39:22.503 回答