#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,
Функция res_init() считывает конфигурационные файлы (см. resolv+(8)) для получения имени домена по умолчанию, порядка поиска и адреса(-ов) серверов имени. Если не задан сервер, то делается попытка поиска локального хоста. Если не задан домен, то это рассматривается как использование локального хоста. Использование может быть отменено переменной окружения 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_query(), res_search(), res_querydomain(), res_mkquery() и res_send() возвращают длину ответа или -1 при ошибках.
Функции dn_comp() и dn_expand() возвращают длину "сжатого" имени, или -1 при ошибках.
/etc/resolv.conf файл конфигурации резольвера /etc/host.conf файл конфигурации резольвера
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |