EN JA
RESOLVER(3)
RESOLVER(3) Linux Programmer's Manual 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 ** lastdnptr );
 

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

 
-lresolv でリンクする。

説明

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

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

res_query() 関数は、指定された typeclass の完全修飾ドメイン名 (FQDN) name を、ネームサーバーへ問い合わせる。応答は、呼び出した側によって用意される長さ anslenanswer バッファーに残される。

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

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

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

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

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

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

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

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

RES_INIT
res_init() が呼び出されていれば真。
RES_DEBUG
Print debugging messages. This option is available only if glibc was built with debugging enabled, which is not the default.
RES_AAONLY
権威付けされた (authoritative) 回答のみ受け入れる。 res_send() は、最終的に権威付けされた回答を得られるか、エラーが返されるまで続行する。 [現在実装されていない]
RES_USEVC
問い合わせに UDP データグラムではなく TCP 接続を用いる。
RES_PRIMARY
プライマリ・ドメインネームサーバーのみ問い合わせる。
RES_IGNTC
切り詰めエラー (truncation error) を無視する。TCP でリトライしない。 [現在実装されていない]
RES_RECURSE
再帰要求 (recursion desired) ビットを問い合わせに設定する。再帰は res_send() ではなくドメインネームサーバーによって行われる。 [デフォルトで有効]
RES_DEFNAMES
設定されていれば、 res_search() はデフォルトのドメイン名を一部分のみからなる名前、すなわちドットを含まない名前に付け加える。 [デフォルトで有効]
RES_STAYOPEN
問い合わせ中に TCP 接続を保つため RES_USEVC と共に用いられる。
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)

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2013-03-05 GNU