Linux RAW套接字错误 - 如何在发送失败后获得正确的MTU?

时间:2014-01-23 21:28:18

标签: c linux sockets

我有一个在RAW套接字上使用sendmsg()的应用程序。我的应用程序使用IP_HDRINCL套接字选项,因为它设置了IP标头。

我将出口数据包中的DF位设置为1(不要分段)。

以下是我要做的事情......当内核尝试发送数据包时,它正在查找目标的路由条目,并从条目中获取用于该主机的MTU (有时因PMTU发现而降低。)

当我尝试发送更大的数据包时,sendmsg()调用失败,错误代码为"message too big"

我现在想要的是在应用程序中弄清楚MTU应该是什么。我一直在尝试使用辅助数据。我在套接字选项中设置IP_RECVERR,然后在设置了recvmsg()标志的同一发送文件描述符上调用MSG_ERRQUEUE,但该调用失败。

这是正确的路径吗?我在手册页中读到辅助数据行为因不同套接字类型而异。这适用于RAW吗?

或者是否有更好的内核API从路由条目中获取正确的MTU

0 个答案:

没有答案