#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,
int res_search(const char *dname, int class, int type,
int res_querydomain(const char *name, const char *domain,
int res_mkquery(int op, const char *dname, int class,
int res_send(const unsigned char *msg, int msglen,
int dn_comp(const char *exp_dn, unsigned char *comp_dn,
int dn_expand(const unsigned char *msg, const unsigned char *eomorig,
res_init() 関数は、デフォルトのドメイン名、検索順、ネームサーバー アドレスを得るために設定ファイル (resolv.conf(5) 参照) を読む。 もしサーバーが示されていなければローカルホストを試す。 ドメインが示されていなければローカルホストに付けられたドメインを用いる。 環境変数 LOCALDOMAIN でオーバーライドできる。 res_init() は、後述する関数のどれかが最初に呼び出された時、その関数 から実行される。
res_query() 関数は、指定された type と class の 完全修飾ドメイン名 (FQDN) name を、ネームサーバーへ問い合わせる。 応答は、呼び出した側によって用意される長さ 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 だけである。 この項目は以下のオプションのビット単位の論理和にできる。
このリストは完全なものではない。 resolv.conf(5) には他にいくつかのフラグが記載されている。
res_query(), res_search(), res_querydomain(), res_mkquery(), res_send() 関数は応答の長さを返す。 また、エラーが発生すれば -1 を返す。
dn_comp() と dn_expand() 関数は圧縮されたドメイン名の長さを返す。 また、エラーが発生すれば -1 を返す。
/etc/resolv.conf レゾルバ設定ファイル /etc/host.conf レゾルバ設定ファイル
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]