我正在研究 UDP 套接字编程,如果请求的数据大于 MTU 值,我必须停止应用程序中的传输。
为了实现这一点,我必须读取 MTU 值,但我不知道在 UDP 套接字的情况下如何获取 MTU 值(可能是通过使用 getsockopt())。
有什么方法可以通过 UDP 套接字找到 MTU 值?
该ifconfig
命令给出了 MTU。通过strace
ing 它,我看到它使用ioctl
(在某些套接字文件描述符上)SIOCGIFMTU
来查询 MTU
另请参阅此相关问题(关于获取与 C 代码相同的信息ifconfig
)
在 linux 中,它不是 UDP 的东西——它是 IP 的东西:
$ man 7 ip
它解释了一切。您正在寻找IP_MTU
套接字选项。它非常复杂,因此您肯定想阅读该手册页。当你在做的时候,你也应该man udp
和man 7 socket
.
我花了很长时间才弄清楚这一点,因为它没有被提及man sys_socket.h
!