【问题标题】:How to set the Don't Fragment (IP_DF) flag in C如何在 C 中设置不分段 (IP_DF) 标志
【发布时间】:2011-03-30 21:50:49
【问题描述】:

我想在 IP 数据包上设置不分片标志。有没有办法通过setsockopt() 函数或sendto() 函数的标志来做到这一点?

我可以使用“普通”套接字执行此操作,还是必须使用原始套接字并自己构建整个 IP 标头,将其偏移字段设置为 IP_DF(在 ip.h 中定义)?

【问题讨论】:

标签: c macos sockets unix raw-sockets


【解决方案1】:

查看/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 */

【讨论】:

    【解决方案2】:

    根据this page,您可以为IP层设置IP_DONTFRAG选项,带有数据报套接字(UDP)。 This SO discussion 指向相似的方向。

    【讨论】:

    • 感谢您的链接。我正在Mac上开发。所有这些常量都在文件 in.h 中定义。不幸的是,我既找不到 IP_DONTFRAG 也找不到 IP_MTU_DISCOVER 常量。但是,大多数(或全部)其他常量都存在 - 例如 IP_MULTICAST_TTL 等等。对 Mac 上的这个问题有任何想法吗?
    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 2010-11-01
    • 2011-07-21
    • 2016-10-12
    • 2019-04-10
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多