小编Dmi*_*tri的帖子

发送 UDP 数据包时忽略 Linux 上的路径 MTU

我正在实现DPLPMTUDerrno = EMSGSIZE ,当我发送的 UDP 数据包长于本地接口的 MTU 时,我想阻止 Linux 内核返回 -1 。我想避免在发送多个数据报时(特别是使用sendmmsg(2))时处理错误处理的痛苦,每个数据报可能属于不同的连接。我宁愿让内核丢弃数据包并让应用程序 DPLPMTUD 逻辑计算出 MTU。

\n

ip(7)有这样说:

\n
              It is possible to implement RFC 4821 MTU probing with SOCK_DGRAM\n              or SOCK_RAW sockets by  setting  a  value  of  IP_PMTUDISC_PROBE\n              (available  since Linux 2.6.22).  This is also particularly use\xe2\x80\x90\n              ful for diagnostic tools such as tracepath(8) that wish  to  de\xe2\x80\x90\n              liberately send probe packets larger than the observed Path MTU.\n
Run Code Online (Sandbox Code Playgroud)\n

然而设置此选项并不会产生预期的效果。下面是说明问题的代码:

\n
              It is possible to …
Run Code Online (Sandbox Code Playgroud)

c linux mtu probe quic

6
推荐指数
0
解决办法
1103
查看次数

clang、gcc 和忽略限定符:谁是对的?

我在编译 BoringSSL 时发现 gcc 和 clang 之间的行为差​​异,并且能够将其缩减为以下测试用例来说明:

\n
typedef char *OPENSSL_STRING;\n#if USE_TYPEDEF\n#define constptr const OPENSSL_STRING\n#else\n#define constptr const char *\n#endif\n\nint\nfoo (const void **ap)\n{\n    constptr a = (constptr) *ap;\n    return a != 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我测试了四种场景,如下:

\n
sh$ g++ -c t2.cc -Wignored-qualifiers -DUSE_TYPEDEF\nt2.cc: In function \xe2\x80\x98int foo(const void**)\xe2\x80\x99:\nt2.cc:11:30: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]\n   11 |     constptr a = (constptr) *ap;\n      |                              ^~\nsh$ g++ -c t2.cc -Wignored-qualifiers \nsh$ clang++ -c t2.cc -Wignored-qualifiers -DUSE_TYPEDEF\nsh$ clang++ -c t2.cc -Wignored-qualifiers \nsh$ \n
Run Code Online (Sandbox Code Playgroud)\n …

c++ gcc qualifiers clang boringssl

1
推荐指数
1
解决办法
552
查看次数

标签 统计

boringssl ×1

c ×1

c++ ×1

clang ×1

gcc ×1

linux ×1

mtu ×1

probe ×1

qualifiers ×1

quic ×1