1

我正在尝试使用套接字选项读取我的TCP 连接的MTU 根据安装在我的Debian Etch上(我知道,它已经很老了,但现在改变它不是一个选项):IP_MTU
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>到我的源代码中,我会得到各种多重定义/重新声明编译错误。有谁知道为什么标题中缺少上述参数以及如何解决该问题?
非常感谢
塞尔吉奥

4

1 回答 1

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 并观察内核在你尝试发送太大的东西时关闭你。这就是我要做的。

于 2013-07-11T15:00:00.637 回答