我编写或修改执行名称解析并需要a的程序
良好的控制过程。所以我不使用getaddrinfo()
,我走了
更深入,并在res_query()
中使用res_send()
/ resolv.h
/ etc,记录在案
在解析器(3)。
虽然没有记录,但设置旋转变压器的常用方法是
更新_res.nsaddr_list
。但这个数组在resolv.h中定义,存储
struct sockaddr_in
,即仅限IPv4地址。 (IPv6地址
是struct sockaddr_in6
,与家人无关的系统会使用struct sockaddr
。)
我正在寻找一种方式(最好是便携式,至少在其中
各种Unix)告诉_res
我也想要IPv6地址。
显然,很久以前,FreeBSD中有一个_res_ext
能力,但我在最近的FreeBSD 7中找不到它(grep
_res_ext /usr/include/resolv.h
一无所获)。你仍然可以找到
code which uses it(试一试with Google Codesearch)。
感谢Alnitak,我注意到它现在显然是_res._ext
而不是.res_ext
。我想知道这些事情在哪里被记录或公布......我不知道它是多么便携_res._ext
。我可以在Debian和FreeBSD上找到它。似乎很少有程序使用它。
答案 0 :(得分:2)
Stéphane - 如果您的resolv.h
不包含对sockaddr_in6
的任何支持,则表明您的特定操作系统上的解析器本身不支持IPv6传输。
我在这里查看了一些系统:
MacOS X 10.5.6 - 支持BIND 9库,该库具有res_setservers()
功能,可以获取IPv6地址,但不会_res._ext
扩展。
CentOS 5.2 - 具有_res._ext
扩展名,但在resolv.conf
的手册页中没有提及IPv6,只是有一个设置告诉解析程序在查找之前返回AAAA记录gethostbyname()
。
编辑 - 同样,FreeBSD的CVS repository表明FreeBSD 7.0(参见标记FREEBSD_7_0_0_RELEASE
)也支持来自Bind 9的res_setservers()
。
答案 1 :(得分:1)
的glibc:
res_setservers: no
__res_state._u._ext.nsaddrs
__res_state._u._ext.nsmap
根据:
将后者设置为MAXNS + 1http://sourceware.org/ml/libc-hacker/2002-05/msg00035.html
BSD-的libc:
res_setservers: yes
__res_state._u._ext.__res_state_ext
对我来说似乎很乱,你可能需要autoconf。