3

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を実行できます$ping6fe80 :: 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を取得する必要があります

4

1 に答える 1

3

ヒントとして与えるNULLと、getaddrinfo は自動的に を使用しますAI_ADDRCONFIG。通常、そのフラグを設定する必要がありますが、リンクローカルアドレスに接続する場合は、フラグを設定したくない場合の 1 つです。

グローバル IPv6 アドレスが構成されていないため、AI_ADDRCONFIGIPv6 ではなく IPv4 のみを選択していると思います。適切なヒントを提供することが、これを回避する方法です。

于 2013-01-27T12:33:22.123 に答える