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.confexcepto 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.