c - test - prueba ipv6
Usando el nombre del resolver de resolv.h con IPv6 (2)
Stéphane: si su resolv.h
no incluye ningún soporte para sockaddr_in6
, eso sugiere que en sus O / S particulares, el resolutor no admite el transporte de IPv6.
Revisé algunos de mis sistemas aquí:
MacOS X 10.5.6: admite la biblioteca BIND 9, que tiene una función
res_setservers()
que puede tomar direcciones IPv6, sin la extensión_res._ext
.CentOS 5.2 - tiene la extensión
_res._ext
, aunque no hay mención de IPv6 en la página man pararesolv.conf
excepto que hay una configuración para decirle al resolver que devuelva registros AAAA antes de buscar registros A paragethostbyname()
.
EDITAR - también, el repositorio de CVS para FreeBSD sugiere que FreeBSD 7.0 (vea la etiqueta FREEBSD_7_0_0_RELEASE
) también admite res_setservers()
desde Bind 9.
Escribo o modifico programas que realizan resolución de nombres y necesitan un buen control del proceso. Entonces no uso getaddrinfo()
, profundizo y uso res_query()
/ res_send()
/ etc en resolv.h
, documentado en resolver (3).
Aunque no está documentado, la forma más común de establecer el resolver utilizado es actualizar _res.nsaddr_list
. Pero esta matriz, definida en resolv.h, almacena struct sockaddr_in
, que es solo direcciones IPv4. (Las direcciones IPv6 son struct sockaddr_in6
, un sistema independiente de la familia usaría struct sockaddr
.)
Estoy buscando una forma (preferiblemente portátil, al menos entre varios Unix) para decirles _res
que también quiero direcciones IPv6.
Aparentemente, hace mucho tiempo, en FreeBSD había un _res_ext
con esta capacidad, pero no puedo encontrarlo más en un FreeBSD 7 reciente ( grep _res_ext /usr/include/resolv.h
no encuentra nada). Todavía puede encontrar el código que lo usa (pruébelo con Google Codesearch ).
Gracias a Alnitak, noté que aparentemente ahora es _res._ext
y no .res_ext
. Me pregunto dónde se documentan o anuncian este tipo de cosas ... No tengo idea de qué tan portátil es _res._ext
. Puedo encontrarlo en Debian y FreeBSD. Parece que hay pocos programas que lo usan.
glibc:
res_setservers: no
__res_state._u._ext.nsaddrs
__res_state._u._ext.nsmap
establezca el último en MAXNS + 1 de acuerdo con:
http://sourceware.org/ml/libc-hacker/2002-05/msg00035.html
BSD-libc:
res_setservers: yes
__res_state._u._ext.__res_state_ext
Me parece desordenado y probablemente necesites autoconf.