我编写或修改执行名称解析并需要对过程进行良好控制的程序。所以我不使用getaddrinfo()
,我更深入地使用res_query()
/ res_send()
/ etc in resolv.h
,在resolver(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
什么也没找到)。您仍然可以找到
使用它的代码(使用 Google Codesearch自己尝试)。
感谢Alnitak,我注意到它显然是现在_res._ext
而不是.res_ext
。我想知道这些事情是在哪里记录或宣布的……我不知道便携_res._ext
性如何。我可以在 Debian 和 FreeBSD 上找到它。似乎很少有程序使用它。