RESOLVER(3)

NOMBRE
res_init, res_query, res_search, res_querydomain, res_mkquery, res_send, dn_comp, dn_expand - rutinas "resolver" (de resolución)

SINOPSIS
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
extern struct state _res;

int res_init(void);

int res_query(const char *dname, int class, int type,
    unsigned char *answer, int anslen);

int res_search(const char *dname, int class, int type,
    unsigned char *answer, int anslen);

int res_querydomain(const char *name, const char *domain,
    int class, int type, unsigned char *answer, int anslen);

int res_mkquery(int op, const char *dname, int class, int type,
    char *data, int datalen, struct rrec *newrr, char *buf,
    int buflen);

int res_send(const char *msg, int msglen, char *answer,
    int anslen);

int dn_comp(unsigned char *exp_dn, unsigned char *comp_dn,
    int length, unsigned char **dnptrs, unsigned char *exp_dn,
    unsigned char **lastdnptr);

int dn_expand(unsigned char *msg, unsigned char *eomorig,
    unsigned char *comp_dn, unsigned char *exp_dn, int length);

DESCRIPCIÓN
Estas funciones hacen peticiones e interpretan las respuestas de los servidores de nombres de dominio de Internet.

La función res_init() lee los ficheros de configuración (ver resolv+(8)) para conseguir el nombre del dominio por defecto, orden de búsqueda y la dirección(es) del servidor(es) de nombres. Si no se proporciona servidor, se intenta con el host local. Si no se proporciona dominio, se usa el asociado al host local. Este puede sobreescribirse con la variable de entorno LOCALDOMAIN. Normalmente res_init() es ejecutado por la primera llamada a una de las otras funciones.

La función res_query() pide al servidor de nombres el nombre de dominio completamente cualificado name de type y class especificados. La respuesta se deja en el buffer answer de longitud anslen proporcionado por quien realiza la llamada.

La función res_search() hace una petición y espera la respuesta como res_query(), pero además implementa las reglas por defecto y las de búsqueda controladas por RES_DEFNAMES y RES_DNSRCH (ver más abajo la descripción de las opciones de _res).

La función res_querydomain() hace una petición utilizando res_query() en la concatenación de name y domain.

Las siguientes son funciones de un nivel más bajo utilizadas por res_query().

La función res_mkquery() construye un mensaje de petición en buf de longitud buflen para el nombre de dominio dname. El tipo de petición op normalmente es QUERY, pero puede ser cualquiera de los tipos definidos en <arpa/nameser.h>. newrr actualmente no se usa.

La función res_send() envía una petición preformateada, dada en msg de longitud msglen y devuelve la respuesta en answer que tiene longitud anslen. Este llamará a res_init(), si aún no ha sido llamado.

La función dn_comp() comprime el nombre de dominio exp_dn y lo guarda en el buffer comp_dn de longitud length. La compresión usa una matriz de punteros dnptrs a nombres previamente comprimidos en el mensaje actual. El primero de los punteros apunta al principio del mensaje y la lista termina con NULL. El límite de la matriz está especificado por lastdnptr. Si dnptr es NULL, los nombres de dominio no se comprimen. Si lastdnptr es NULL, la lista de etiquetas no se actualiza.

La función dn_expand() expande el nombre de dominio comprimido comp_dn a un nombre de dominio completo, y es puesto en el buffer exp_dn de tamaño length. El nombre comprimido está contenido en una petición o mensaje de respuesta, y msg apunta al principio del mensaje.

Las rutinas del "resolver" usan la configuración global e información del estado contenida en la estructura _res, definida en <resolv.h>. El único campo que puede manipular normalmente el usuario es _res.options. Este campo puede contener un "o (OR) lógico" bit a bit de las siguientes opciones:

RES_INIT
    Cierto si res_init() ha sido llamado.

RES_DEBUG
    Imprimir mensajes de depuración.

RES_AAONLY
    Aceptar respuestas autoritativas solamente. res_send() continua hasta que encuentra una respuesta autoritativa o devuelve un error. [Àún no implementado].

RES_USEVC
    Usar conexiones TCP para las peticiones, en vez de datagramas UDP.

RES_PRIMARY
    Hacer petición solamente al servidor de nombres de dominio primario.

RES_IGNTC
    Ignorar errores de truncado. No reintentar con TCP. [Aún no implementado].

RES_RECURSE
    Poner a 1 el bit de recursión deseada en las peticiones. La recursión es llevada a cabo por el servidor de nombres de dominio, no por res_send(). [Activado por defecto].

RES_DEFNAMES
    Si está puesto a 1, res_search() añadirá el nombre de dominio por defecto a los nombres de componentes simples, p.ej. aquellos que no contienen punto. [Activado por defecto].

RES_STAYOPEN
    Usado con RES_USEVC para mantener la conexión TCP abierta entre peticiones.

RES_DNSRCH
    Si está a 1, res_search() buscará nombres de host en el dominio actual y en los dominios "padre". Esta opción es usada por gethostbyname(3). [Activado por defecto].

VALOR DEVUELTO
La función res_init() devuelve 0 si hay éxito, o -1 si hubo un error.

Las funciones res_query(), res_search(), res_querydomain(), res_mkquery() y res_send() devuelven la longitud de la respuesta, o -1 si hubo un error.

Las funciones dn_comp() y dn_expand() devuelven la longitud del nombre comprimido, o -1 si hubo un error.

FICHEROS
/etc/resolv.conf          fichero de configuración de resolver
/etc/host.conf            fichero de configuración de resolver

CONFORME A
BSD 4.3

VÉASE TAMBIÉN
gethostbyname(3), hostname(7), named(8), resolv+(8)