1

プログラムで IPv6 DNS サーバーのリストを取得しようとしています。現在、libresolv と次のコードを使用しています。

#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)
{
    res_state res = malloc(sizeof(struct __res_state));
    res_ninit(res);

    printf("%p\n", res->_u._ext.nsaddrs[0]); // (nil) here
}

resolv.h によると、res->_u._ext.nsaddrs フィールドには、必要なアドレスを含む「struct sockaddr_in6 *」の配列が含まれているはずですが、NULL の配列が含まれています。

IPv4 DNS サーバー リストは res->nsaddr_list フィールドからアクセスできますが、IPv6 リストは常に空です。これをUbuntuとCentOSの両方で確認しました。IPv6 が正しく構成されている。

4

1 に答える 1

0

あなたのコードは正しいようです。システムが認識していないため、ほとんどのres_ninit()場合、IPv6 DNS サーバーは に配置されません。struct res_state

次の行を/etc/resolv.confに追加してみてください:

ネームサーバー 2001:4860:4860::8844

于 2017-01-03T12:51:07.240 に答える