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 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);

説明
これらの関数はインターネットのドメインネームサーバーに問い合わせ、その応答 を解する。

res_init() 関数は、デフォルトのドメイン名、検索順、ネームサーバー アドレスを得るために設定ファイル(resolv+(8)参照)を読む。 もしサーバーが示されていなければローカルホストを試す。 ドメインが示されていなければローカルホストに付けられたドメインを用いる。 環境変数 LOCALDOMAIN でオーバーライドできる。 res_init() は、後述する関数のどれかが最初に呼び出された時、その関数 から実行される。

res_query() 関数は、完全に記述されたドメイン名(FQDN) (型、 クラスを明示した名前) を、ネームサーバーへ問い合わせる。 応答は、呼び出した側によって用意される長さ anslen の answer バッファーに残される。

res_search() 関数は、問い合わせを行い res_query() 同様その応答を 待つが、さらにデフォルトを実装しており RES_DEFNAMES と RES_DNSRCH によって 規定される検索ルールを適用する。(下記 _res オプションの説明を参照)

 res_querydomain() 関数は name と domain の結合に res_query() を用いて問い合わせを行う。

次の関数は、res_query() で使われる下位ルーチンである。

 res_mkquery() 関数は、ドメイン名 dname の為に、長さ buflen の buf に問い合わせるメッセージを作成する。 問い合わせの型 op は通常 "QUERY" だが、 <arpa/nameser.h> で定義 された型のどれでも良い。
 newrr は現在使用されていない。

 res_send() 関数は、長さ msglen の msg に決められた書式 で問い合わせ、 answer に長さ anslen の回答を返す。 まだ呼び出されていなければ res_init() を呼び出す。

 dn_comp() 関数はドメイン名 exp_dn を圧縮して、長さ length のバッファー comp_dn に保存する。 圧縮には現在のメッセージ中に前もって圧縮された名前へのポインター配列 dnptrs を用いる。 最初のポインターはメッセージの冒頭を指し、そのリストは NULL で終わる。 配列の範囲は lastdnptr で決められる。 dnptr が NULL ならばドメイン名は圧縮されない。 lastdnptr が NULL ならば、そのラベルのリストはアップデートされない。

dn_expand() 関数は、圧縮されたドメイン名 comp_dn からサイズ が length の exp_dn バッファーに正式なドメイン名を展開する。 その圧縮された名前は、問い合わせ、または応答メッセージに含まれてい て、 msg がメッセージの冒頭を指す。

レゾルバ・ルーチンは、 <resolv.h> に定義された _res 構造体に 含まれている全体的な設定と状態の情報を使用する。 通常ユーザーに操作できる項目は _res.options だけである。 この項目は以下のオプションのビット単位の論理和にできる。

RES_INIT
     res_init() が呼び出されていれば真。

RES_DEBUG
    デバッグ・メッセージを出力する。

RES_AAONLY
    権威付けされた (authoritative) 回答のみ受け入れる。 res_send() は、最終的に権威付けされた回答を得られるか、エラーが返される まで続行する。 [現在実装されていない]

RES_USEVC
    問い合わせに UDP データグラムではなく TCP 接続を用いる。

RES_PRIMARY
    プライマリ・ドメインネームサーバーのみ問い合わせる。

RES_IGNTC
    トランケーション・エラー(truncation errors)を無視する。 TCP でリトライしない。 [現在実装されていない]

RES_RECURSE
    繰り返し要求ビットを問い合わせに設定する。 繰り返しは res_send() ではなくドメインネームサーバーによって行われる。 [デフォルトで有効]

RES_DEFNAMES
    設定されていれば、 res_search() はデフォルトのドメイン名を一部分 のみからなる名前、すなわちドットを含まない名前に付け加える。 [デフォルトで有効]

RES_STAYOPEN
    問い合わせ中に TCP 接続を保つため RES_USEVC と共に用いられる。

RES_DNSRCH
    設定されていれば、 res_search() は現在のドメインおよび親ドメインの ホスト名を探す。このオプションは gethostbyname(3)で用いられる。 [デフォルトで有効]

RETURN VALUE
 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            レゾルバ設定ファイル

準拠
BSD 4.3

関連項目
gethostbyname(3), hostname(7), named(8), resolv+(8)