【发布时间】:2014-05-11 02:54:58
【问题描述】:
我使用 getifaddrs() 函数来获取接口的 IP 地址。从手册页中,我知道:
ifa_addr 字段引用接口的地址或 接口的链路级地址,如果存在,则为NULL。 (应参考 ifa_addr 字段的 sa_family 字段来阻止 挖掘 ifa_addr 地址的格式。)
我的问题是:ifa_addr 怎么可能是 NULL?在我看来,每个接口都有它的地址,不是吗?
我google了一晚上,我发现的每一页都只是说“这个字段可能包含一个NULL指针”,不再解释......
我真的不知道如何搜索以获取详细信息,我尝试了很多关键词,例如“getifaddrs ifa_addr NULL”……但谷歌只是向我展示了 getifaddrs() 函数的手册页……
但是,我确实只找到一页,这给了我更多信息。一点点!
http://sourceforge.net/p/bonding/discussion/77913/thread/03f93486/
那么,谁能告诉我一些关于这个主题的更详细的信息?
【问题讨论】:
-
ppp接口可能吗? google "ppp ifa_addr" 你会发现一些对这个理论的支持,例如:github.com/mcproxy/mcproxy/pull/1
-
来自手册页:“...如果接口没有地址,ifa_addr 和其他字段实际上可以为 NULL,如果接口分配了 IP 地址,则不返回链接级地址。”
-
我今天遇到了同样的问题,因为我的一个程序无法在数据中心托管的服务器上运行。我想知道在什么情况下接口可以没有地址也没有链接级地址。我注意到有问题的界面没有出现在 ifconfig 中。
-
如果我们给出
-a选项,它就会出现。显然,它已经下降了。如果我运行ip link show来检查它,它将被标记为“链接/无效”。
标签: c linux sockets ip-address