我正在使用getnameinfo
,如下所示:
ifaddrs *ifaddr = NULL, *ifa = NULL;
int rc, family, insize;
rc = getifaddrs(&ifaddr);
...
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
family = ifa->ifa_addr->sa_family
insize = (family == AF_INET) ?
(int)sizeof(struct sockaddr_in) :
(int)sizeof(struct sockaddr_in6);
char host[HOST_NAME_MAX];
rc = getnameinfo(ifa->ifa_addr, insize,
host, sizeof(host), NULL, 0, NI_NUMERICHOST);
}
...
当函数返回IPv6地址时,它包含附加到数字IP地址的接口:
fe80::62a4:4cff:fe05:dc1b%eth0
将接口附加到数字IP地址的目的是什么?
是否有可用的标志来控制接口附加到IP地址?
答案 0 :(得分:2)
fe80::*
地址范围为link-local,这意味着该地址仅对该特定网络有效,同一地址可能引用不同网络上的差异主机。因此,指定链路本地地址而不指定哪个网络适配器是没有意义的。此外,DNS在链接本地范围之外变得毫无意义,例如由ZeroConf / multicast-DNS提供。
Unix主机倾向于按名称指定适配器,Windows主机将按索引指定适配器。请注意,Windows为IPv4和IPv6维护单独的接口索引。