getaddrinfo for ipv6 link local

时间:2013-01-21 17:07:13

标签: ipv6 getaddrinfo

我试图将地址信息输入到structred addrinfo ** result。

但是我得到了代码

的以下错误 getaddrinfo中的

错误:不支持主机名的地址系列

代码

error = getaddrinfo("fe80::4e80:93ff:fe33:13ff%wlan0", NULL, NULL, &result);
if (error != 0)
{
    fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(error));
    exit(EXIT_FAILURE);
}

我可以ping这个地址 $ ping6 fe80 :: 4e80:93ff:fe33:13ff%wlan0

这是ifconfig详细信息

wlan0     Link encap:Ethernet  HWaddr 4c:80:93:33:13:ff  
          inet addr:192.168.43.188  Bcast:192.168.43.255  Mask:255.255.255.0
          inet6 addr: fe80::4e80:93ff:fe33:13ff/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1985 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2748 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:950126 (950.1 KB)  TX bytes:684317 (684.3 K

当我尝试使用IPv4时,这是有效的,但我需要获取ipv6的getaddrinfo

1 个答案:

答案 0 :(得分:2)

当您提供NULL作为提示时,getaddrinfo将自动使用AI_ADDRCONFIG。通常你想要设置该标志,但是当连接到链接时,本地地址就是你不想要它的情况。

我猜你没有配置全局IPv6地址,因此AI_ADDRCONFIG只选择IPv4,而不选择IPv6。提供适当的提示是避免这种情况的方法。