プログラムで 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 が正しく構成されている。