J'écris ou modifie des programmes qui effectuent la résolution de nom et ont besoin d'un bon contrôle du processus . Donc, je n'utilise pas getaddrinfo()
, je vais plus profond et utiliser res_query()
/res_send()
/etc dans resolv.h
, documenté dans le résolveur (3).En utilisant le résolveur de nom de resolv.h avec IPv6
Bien que n'étant pas documenté, le moyen le plus commun pour définir le résolveur utilisé est mise à jour _res.nsaddr_list
. Mais ce tableau, défini dans resolv.h, stocke struct sockaddr_in
, c'est-à-dire uniquement les adresses IPv4. (Adresses IPv6 sont struct sockaddr_in6
, un système indépendant famille utiliserait struct sockaddr
.)
Je suis à la recherche d'un moyen (portable de préférence, au moins parmi les divers Unix) pour dire _res
que je veux aussi les adresses IPv6.
Apparemment, il y a longtemps, il y avait dans FreeBSD un _res_ext
avec cette capacité mais je ne peux pas trouver plus dans un 7 récent FreeBSD (grep _res_ext /usr/include/resolv.h
ne trouve rien). Vous pouvez toujours trouver code which uses it (essayez-vous with Google Codesearch). Grâce à Alnitak, j'ai remarqué qu'il est apparemment maintenant _res._ext
et non .res_ext
. Je me demande où ces sortes de choses sont documentées ou annoncées ... Je n'ai aucune idée de comment portable _res._ext
est. Je peux le trouver sur Debian et FreeBSD. Il semble qu'il y ait peu de programmes qui l'utilisent.
Mais :-(sans papier susanna: ~% uname -r 7.0-RELEASE susanna: ~% man res_setservers Pas de saisie manuelle pour res_setservers – bortzmeyer
Je ne trouve pas 'res_setservers' sur des machines Linux/glibc I. supposons qu'il n'y a pas de standard pour la résolution IPv6 :-( – bortzmeyer
impair - c'est dans le fichier resolv.h :(Le symbole existe dans Mac OS X, bien que ce soit vraiment res_9_setservers et un #define donne accès à la version normale. – Alnitak