IP不要在Mac OS上分段

时间:2010-12-11 07:30:13

标签: objective-c tcp ip

我正在编写一个通过TCP传输程序的文件。

我想在IP

上设置do not fragment标志

在套接字上,这就是我想要做的事情:

int val = 1;
setsockopt(sd, IPPROTO_IP, IP_DONTFRAG, &val, sizeof(val));

但Mac OS上似乎无法使用IP_DONTFRAG。我错过了什么吗?还是我忘了把它正确包括在内?

如果有人知道,请提前致谢

- 萨姆

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

DF位通常由具有TCP连接的操作系统自动用于path MTU (PMTU) discovery。如果有的话,你可能有一个套接字选项来禁用PMTU发现,这将导致永远不会设置DF(它是linux上的IP_MTU_DISCOVER套接字选项)。如果启用PMTU发现,则会产生始终设置DF的效果。

在逐个数据包的基础上设置/取消设置是没有意义的,因为您使用TCP和TCP操作段而不是数据包。如果要设置数据包级别的东西,则需要使用较低层协议。

答案 2 :(得分:0)

通常在所有TCP数据包上设置Don't Fragment位。你没有必要做任何特殊的事情来实现这一点。

答案 3 :(得分:0)

/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers处看起来似乎IP_DF

netinet/ip.h
99:#define IP_DF 0x4000                    /* dont fragment flag */
netinet6/in6.h
547:#define IPV6_DONTFRAG           62 /* bool; disable IPv6 fragmentation */