RESOLVER(3)

ИМЯ
res_init, res_query, res_search, res_querydomain, res_mkquery, res_send, dn_comp, dn_expand - процедуры определителя имён

ОБЗОР
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
extern struct __res_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, const unsigned char *data, int datalen,
    const unsigned char *newrr, unsigned char *buf, int buflen);

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

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

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

Компонуется при указании параметра -lresolv.

ОПИСАНИЕ
Эти функции выполняют запросы и обрабатывают ответы, полученные от серверов доменных имён Интернет.

Функция res_init() считывает файлы настройки (смотрите resolv.conf(5)) для получения имени домена по умолчанию и адреса(-ов) серверов имён. Если серверы не заданы, то используется локальный узел. Если не задан домен, то используется домен локального узла. Это может быть изменено через переменную окружения LOCALDOMAIN. Обычно, функция res_init() выполняется из первого вызова одной из других функций.

Функция res_query() запрашивает у сервера имён полное доменное имя name заданного типа type и класса class. Ответ помещается в буфер answer длиной anslen, указанный вызывающим.

Функция res_search() отправляет запрос и ждёт ответа, как и res_query(), но при этом ещё учитывает правила работы и поиска по умолчанию, настраиваемые через RES_DEFNAMES и RES_DNSRCH (смотрите ниже описание параметров _res).

Функция res_querydomain() отправляет запрос с помощью res_query() для объединения имён name и domain.

Следующие функции являются процедурами низкого уровня, которые используются res_query().

Функция res_mkquery() создаёт сообщение-запрос в buf длиной buflen для имени домена dname. Тип op запроса обычно равен QUERY, но может содержать значение любого типа, которые определены в <arpa/nameser.h>. В данный момент newrr не используется.

Функция res_send() посылает заранее созданный запрос, указанный в msg длиной msglen, и возвращает ответ в answer длиной anslen. Вызывает функцию res_init(), если этого ещё не было.

Функция dn_comp() сжимает имя домена exp_dn и сохраняет его в буфере comp_dn длиной length. Сжатие использует массив указателей dnptrs на предварительно сжатые имена в текущем сообщении. Первый указатель обозначает начало сообщения, а весь список оканчивается NULL. Предел массива определяется в lastdnptr. Если dnptr равно NULL, то имя домена не является сжатым. Если lastdnptr равно NULL, то список меток не обновляется.

Функция dn_expand() раскрывает сжатое имя домена comp_dn до полного доменного имени, которое затем сохраняется в буфере exp_dn длиной length. Сжатое имя содержится в запросе или ответном сообщении, а msg указывает на начало сообщения.

Функции определения имени используют общие настройки и информацию о состоянии, содержащиеся в структуре _res, которая определена в <resolv.h>. Единственным полем, с которым, обычно, работает пользователь, является _res.options. Это поле содержит поразрядное ИЛИ следующих параметров:

RES_INIT
    Истинно, если уже вызывалась res_init().

RES_DEBUG
    Печатать отладочные сообщения. Этот параметр доступен только, если glibc собрана с включённой отладкой, которая по умолчанию выключена.

RES_AAONLY
    Принимать только авторизованные ответы. Функция res_send() продолжает работу, пока не найдет авторизованный ответ, или возвращает ошибку (в данный момент не реализовано).

RES_USEVC
    использовать TCP-соединение для запросов вместо датаграмм UDP.

RES_PRIMARY
    Запрашивать только первичный сервер доменных имён.

RES_IGNTC
    Игнорировать ошибки обрезания. Не пытаться повторить запрос с помощью TCP (в данный момент не реализовано).

RES_RECURSE
    Установить в запросах бит рекурсии. Рекурсия выполняется сервером доменных имён, а не функцией res_send() (включено по умолчанию).

RES_DEFNAMES
    Если указан, то res_search() будет добавлять имя домена по умолчанию к именам с одним компонентом в имени (не содержащим точек) (включено по умолчанию).

RES_STAYOPEN
    Используется вместе с RES_USEVC для поддержания TCP-соединения запросов между ответами.

RES_DNSRCH
    Если указан, то res_search() будет искать имена узлов в текущем и родительском домене. Этот параметр используется gethostbyname(3) (включено по умолчанию).

Данный список не полон. Вы можете найти другие параметры в resolv.conf(5).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении функция res_init() возвращает 0, а при ошибках возвращает -1.

Функции res_query(), res_search(), res_querydomain(), res_mkquery() и res_send() возвращают длину ответа или -1 при ошибках.

Функции dn_comp() и dn_expand() возвращают длину сжатого имени, или -1 при ошибках.

ФАЙЛЫ
/etc/resolv.conf          файл настройки определителя имён
/etc/host.conf            файл настройки определителя имён

СООТВЕТСТВИЕ СТАНДАРТАМ
4.3BSD.

СМОТРИТЕ ТАКЖЕ
gethostbyname(3), resolv.conf(5), resolver(5), hostname(7), named(8)