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).