Linux getnameinfo返回带有%&书信电报;界面>&引用;

Linux getnameinfo返回带有%&书信电报;界面>&引用;,linux,network-programming,ip,ipv6,Linux,Network Programming,Ip,Ipv6,我使用的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)

我使用的
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地址?

fe80::*
地址在范围内,这意味着该地址仅对该特定网络有效,同一地址可能引用不同网络上的不同主机。因此,如果不指定哪个网络适配器,则指定链路本地地址是没有意义的。此外,DNS在链路本地范围之外变得相当无意义,例如由/多播DNS提供


Unix主机倾向于按名称指定适配器,Windows主机将按索引指定适配器。请注意,Windows为IPv4和IPv6维护单独的接口索引。

“因此,在不指定哪个网络适配器的情况下指定链接本地地址是毫无意义的”-在该死的16字节的情况下,他们是如何设法耗尽IPv6地址的?这并不是说他们没有足够的空间容纳下8个八位字节中的4位或6位索引。。。。下一步是什么?那么他们真的可以提供所有需要的地址吗?@noloader:IPv6地址没有用完,而链路本地地址对于自动配置、路由协议和ZeroConf/Bonjour风格的服务非常有用。请记住,IPv6每个接口都有多个地址,因此在链接本地地址旁边通常有几个全局单播地址。