【发布时间】:2015-04-16 04:37:19
【问题描述】:
我正在进行 UDP 套接字编程,如果请求的数据大于 MTU 值,我必须停止应用程序中的传输。
为了实现这一点,我必须读取 MTU 值,但我不知道在 UDP 套接字的情况下如何获取 MTU 值(可能是通过使用 getsockopt())。
有没有办法通过 UDP 套接字找到 MTU 值?
【问题讨论】:
我正在进行 UDP 套接字编程,如果请求的数据大于 MTU 值,我必须停止应用程序中的传输。
为了实现这一点,我必须读取 MTU 值,但我不知道在 UDP 套接字的情况下如何获取 MTU 值(可能是通过使用 getsockopt())。
有没有办法通过 UDP 套接字找到 MTU 值?
【问题讨论】:
ifconfig 命令提供 MTU。通过straceing,我看到它使用ioctl(在某些套接字文件描述符上)和SIOCGIFMTU 来查询MTU
另见this related question(关于获取与ifconfig 相同的C 代码信息)
【讨论】:
在 linux 中,它不是 UDP 的东西——它是 IP 的东西:
$ man 7 ip
它解释了一切。您正在寻找IP_MTU 套接字选项。它非常复杂,因此您肯定想阅读该手册页。当您使用它时,您还应该man udp 和man 7 socket。
我花了很长时间才弄清楚这一点,因为man sys_socket.h 中没有提到它!
【讨论】: