Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Debian蚀刻上缺少IP_MTU插槽选项定义?_C_Linux_Sockets_Debian - Fatal编程技术网

C Debian蚀刻上缺少IP_MTU插槽选项定义?

C Debian蚀刻上缺少IP_MTU插槽选项定义?,c,linux,sockets,debian,C,Linux,Sockets,Debian,我正在尝试使用IP\u MTUsocket选项读取我的TCP连接的MTU 根据安装在我的Debian Etch上的man 7 ip(我知道,它已经很旧了,但现在无法更改): 概要 #包括 #包括 #包含/*上一页的超集*/ [剪辑] IP_MTU检索当前套接字的当前已知路径MTU。 仅在已连接套接字时有效。返回一个整数。 仅作为getsockopt(2)有效。 问题是上面的套接字选项不存在于手册页命名的任何包含文件中。(因此我的代码没有编译;) 我发现它是在中定义的(grep是你的朋友) 如果

我正在尝试使用
IP\u MTU
socket选项读取我的TCP连接的MTU 根据安装在我的Debian Etch上的
man 7 ip
(我知道,它已经很旧了,但现在无法更改):

概要
#包括
#包括
#包含/*上一页的超集*/
[剪辑]
IP_MTU检索当前套接字的当前已知路径MTU。
仅在已连接套接字时有效。返回一个整数。
仅作为getsockopt(2)有效。
问题是上面的套接字选项不存在于手册页命名的任何包含文件中。(因此我的代码没有编译;)
我发现它是在
中定义的(
grep
是你的朋友)
如果我尝试将
添加到源代码中,就会出现各种各样的多重定义/重新声明编译错误。 有没有人知道为什么上面的参数在标题中缺失,以及如何解决这个问题
非常感谢

塞尔吉奥的答案是:我认为没有答案。我将Red Hat Enterprise Linux作为第4版(Nahant Update 8)运行,我遇到了完全相同的问题:

  • man 7 ip说我可以查询MTU
  • grep-Re IP_MTU/usr/include/*表示宏仅存在于linux/in.h中
  • 我不能使用linux/in.h,否则会出现大量错误

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

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

  • man 7 ip说我可以查询MTU
  • grep-Re IP_MTU/usr/include/*表示宏仅存在于linux/in.h中
  • 我不能使用linux/in.h,否则会出现大量错误

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

定义是否只在
linux/in.h
中出现?它不是出现在
xxxxx/bits/in.h
中吗
netinet/in.h
似乎将
in.h
包含在
bits
文件夹下(至少在我的系统上)。您可以尝试只查看预处理器输出(使用
gcc
-E
选项)&grep for“include”来查看包含的文件并检查其中是否有定义。似乎唯一定义它的文件是
linux/in.h
vm-etch-dev32#grep-rn IP_MTU*bits/in.h:61:#define IP_*MTU\u DISCOVER 10/-int;请参见下文*/bits/in.h:67:/*IP\u MTU\u DISCOVER参数。*/linux/in.h:67:#定义IP_MTU_DISCOVER 10 linux/in.h:71:#定义IP_MTU 14 linux/in.h:80:/*IP_MTU_DISCOVER value*/够奇怪了
位/in.h
似乎是在定义IPv6的MTU值:
#定义IPv6_MTU 24
这很奇怪。。。
bits.h中第61行和第67行之间的条目是什么?注释似乎表明这些是
IP\u MTU\u DISCOVER的参数
定义是否仅出现在
linux/in.h
中?它不是出现在
xxxxx/bits/in.h
中吗
netinet/in.h
似乎将
in.h
包含在
bits
文件夹下(至少在我的系统上)。您可以尝试只查看预处理器输出(使用
gcc
-E
选项)&grep for“include”来查看包含的文件并检查其中是否有定义。似乎唯一定义它的文件是
linux/in.h
vm-etch-dev32#grep-rn IP_MTU*bits/in.h:61:#define IP_*MTU\u DISCOVER 10/-int;请参见下文*/bits/in.h:67:/*IP\u MTU\u DISCOVER参数。*/linux/in.h:67:#定义IP_MTU_DISCOVER 10 linux/in.h:71:#定义IP_MTU 14 linux/in.h:80:/*IP_MTU_DISCOVER value*/
够奇怪了
位/in.h
似乎是在定义IPv6的MTU值:
#定义IPv6_MTU 24
这很奇怪。。。
bits.h中第61行和第67行之间的条目是什么?注释似乎表明这些是
IP\u MTU\u DISCOVER
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).