在Debian Etch上缺少IP_MTU套接字选项吗?

时间:2012-05-05 14:55:41

标签: c linux sockets debian

我正在尝试使用IP_MTU套接字选项读取 TCP连接 MTU 根据我在 Debian Etch 上安装的man 7 ip(我知道,它已经很老了,但现在不能改变它):

SYNOPSIS
       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/ip.h> /* superset of previous */
[CUT]
IP_MTU Retrieve the current known path MTU of the current socket.
Only valid when the socket has been  connected.  Returns  an integer.  
Only valid as a getsockopt(2).

问题是上述套接字选项不存在于手册页指定的任何包含文件中。 (因此我的代码没有编译;))
相反,我发现它在<linux/in.h>中定义(grep是你的朋友)
如果我尝试将<linux/in.h>添加到我的源代码中,我会得到所有类型的多重定义/重新声明编译错误。 有没有人知道为什么标题中缺少上述参数以及如何解决问题?
非常感谢 塞尔吉奥

1 个答案:

答案 0 :(得分:1)

答案是:我认为没有答案。我正在运行Red Hat Enterprise Linux AS第4版(Nahant Update 8),我遇到了完全相同的问题:

  • man 7 ip说我可以查询MTU
  • grep -Re IP_MTU / usr / include / *表示宏仅存在于linux / in.h中
  • 我无法使用linux / in.h或者我遇到了大量错误

所以,我想唯一要做的就是通过设置MTU发现,不断调整MTU并观察内核在你尝试发送太大的东西时关闭你来解决问题。这就是我要做的事。