在调用getifaddrs()时,ifa_addr何时为NULL?

时间:2014-03-31 16:33:37

标签: c linux sockets ip-address

我已经使用getifaddrs()函数来获取接口的ip地址。从手册页中,我知道:

  

ifa_addr字段引用接口的地址或        接口的链路级地址(如果存在),否则为NULL。        (应该查询ifa_addr字段的sa_family字段以确定        挖掘ifa_addr地址的格式。)

我的问题是: ifa_addr 怎么可能为NULL?在我看来,每个界面都有自己的地址,不是吗?

我用谷歌搜索了一个晚上,我发现的每一页都只是说"这个字段可能包含一个空指针",没有更多的解释......

我真的不知道如何搜索以获取详细信息,我尝试了许多关键词,例如" getifaddrs ifa_addr NULL" ...但谷歌只是告诉我getifaddrs()函数的手册页......

但是,我确实只找到一页,这给了我更多的信息。只是一点点!

http://sourceforge.net/p/bonding/discussion/77913/thread/03f93486/

那么,任何人都可以向我展示一些关于这个主题的更详细的信息吗?

2 个答案:

答案 0 :(得分:0)

如前所述,对于没有分配任何地址的接口,ifa_addr字段可能为NULL。在实践中看这种情况的一种简单方法是添加一个隧道接口:

$ sudo ip tuntap add tun42 mode tun

这将创建一个没有任何地址的隧道接口:

$ ifconfig -a
tun42: flags=4240<POINTOPOINT,NOARP,MULTICAST>  mtu 1500
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)

$ ip link show
5: tun42: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 500
link/none 

答案 1 :(得分:0)

  

我的问题是:ifa_addr怎么可能为NULL?我认为每个接口都有其地址,不是吗?

这种假设是错误的,接口不需要配置IP地址(或getifaddrs()返回的其他类型的地址)。