我想在IP数据包上设置Do not Fragment标志。有没有办法通过setsockopt()
函数或sendto()
函数的标志来实现?
我可以使用“普通”套接字执行此操作,还是必须使用原始套接字并自行构建整个IP标头,将其偏移字段设置为IP_DF
(在ip.h中定义)?< / p>
答案 0 :(得分:2)
根据this page,您可以使用数据报套接字(UDP)为IP层设置IP_DONTFRAG
选项。 This SO discussion指向类似的方向。
答案 1 :(得分:0)
看着/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers
,我确实找到了一些常数:
netinet/ip.h
99:#define IP_DF 0x4000 /* dont fragment flag */
netinet6/in6.h
547:#define IPV6_DONTFRAG 62 /* bool; disable IPv6 fragmentation */