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

Dmi*_*tri 6 c linux mtu probe quic

我正在实现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 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

当我发送大于 MTU 的数据包时,sendto()上面返回 -1 并errno设置为EMSGSIZE-- 正是我想要避免的。

\n

有办法做我想做的事吗?

\n