GETHOSTBYNAME(3) FreeBSD ライブラリ関数マニュアル GETHOSTBYNAME(3)
名称
gethostbyname, gethostbyname2, gethostbyaddr, gethostent, sethostent, endhostent, herror, hstrerror − ネットワークホストのエントリの取得 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <netdb.h> extern int h_errno; struct hostent * |
gethostbyname(const char *name); struct hostent * |
gethostbyname2(const char *name, int af); struct hostent * |
gethostbyaddr(const char *addr, int len, int type); struct hostent * |
gethostent(void); void |
sethostent(int stayopen); void |
endhostent(void); void |
herror(const char *string); const char * |
hstrerror(int err); |
解説 |
gethostbyname(), gethostbyname2(), gethostbyaddr() 関数はそれぞれ、次に示 す構造を持つオブジェクトへのポインタを返します。構造体には、名前またはア ドレスによって参照されるインターネットホストが記述されていて、ネームサー バ named(8) から、または /etc/hosts にある行の内訳フィールドから得られた 情報を含んでいます。ローカルのネームサーバが実行されていない場合、これら のルーチンは /etc/hosts を検索します。 struct hostent { char *h_name; /* ホストの正式名 */ char **h_aliases; /* 別名リスト */ int h_addrtype; /* ホストアドレスタイプ */ int h_length; /* アドレスの長さ */ char **h_addr_list; /* ネームサーバからのアドレスリスト */ }; #define h_addr h_addr_list[0] /* アドレス、後方互換用 */ この構造体のメンバは次のとおりです。 |
h_name
ホストの正式名。 h_aliases h_addrtype h_length h_addr_list h_addr ネームサーバを使用する場合、名前がドットで終わっていない時は gethostbyname() および gethostbyname2() は名前が付いたホストを、現在のド メインと親のドメインから検索します。名前にドットが含まれてなく、且つ環境 変数 ‘‘HOSTALIASES’’ にエイリアスファイルの名前が含まれている場合は、入力 名に適合するエイリアスが、まずエイリアスファイルから検索されます。ドメイ ン検索の手続きとエイリアスファイルの書式については、 hostname(7) を参照し てください。 gethostbyname2() 関数は gethostbyname() の発展型で、 AF_INET 以外のアドレ スファミリ、たとえば AF_INET6 での検索を可能にするためのものです。ただし 現在は、 af 引数に AF_INET を指定する必要があります。他の値を指定すると gethostbyname2() 関数は、 h_errno を NETDB_INTERNAL に設定した後で、 NULL を返します。 sethostent() 関数は、問い合わせの際に接続された TCP ソケットを使いたい場 合に使用できます。 stayopen フラグが 0 でなければ、 TCP によってすべての 問い合わせをネームサーバに送り、 gethostbyname(), gethostbyname2(), gethostbyaddr() のそれぞれ呼び出し後にも、接続を保持するようにオプション を設定します。フラグが 0 の時、問い合わせは UDP データグラムを使用して実 行されます。 endhostent() 関数は TCP 接続をクローズします。 herror() 関数は診断出力にメッセージを書き出します。診断出力は文字列パラ メータ s と、定数文字列 ": " と、 h_errno の値に対応するメッセージで構成 されます。 hstrerror() 関数は、 err パラメータの値に対応するメッセージテキストの文字 列を返します。 関連ファイル |
/etc/hosts
/etc/host.conf 診断 |
gethostbyname(), gethostbyname2(), gethostbyaddr() のエラー状態は、 NULL ポインタが返ることで示されます。その場合は外部整数 h_errno をチェックする ことにより、一時的なエラーであるのか、無効または未知のホスト名を指定した ためかを判断できます。 herror() ルーチンによって、エラーを記述するエラー メッセージを表示できます。引数 string は NULL でなければ表示され、後にコ ロンとスペースが続きます。エラーメッセージが終端の改行とともに印刷されま す。 変数 h_errno は次の値を取り得ます。 |
HOST_NOT_FOUND
指定した名前のホストが未知です。 TRY_AGAIN NO_RECOVERY NO_DATA 関連項目 |
getaddrinfo(3), resolver(3), hosts(5), hostname(7), named(8) |
警告
ネームサーバは検索せずに /etc/hosts だけを検索するルーチンを使用するよう に libc(3) が構築された場合、 gethostent() 関数が定義され、 sethostent() および endhostent() が再定義されます。 gethostent() 関数は、 /etc/hosts ファイルの次の行を読み込みます。この際、 必要ならばファイルをオープンします。 sethostent() 関数はファイル /etc/hosts をオープンもしくはリワインドしま す。 stayopen 引数が 0 でなければ、 gethostbyname(), gethostbyname2(), gethostbyaddr() のそれぞれの呼び出しの後、ファイルはクローズされません。 endhostent() 関数はファイルをクローズします。 |
歴史
herror() 関数は 4.3BSD で登場しました。 endhostent(), gethostbyaddr(), gethostbyname(), gethostent(), sethostent() 関数は 4.2BSD で登場しまし た。 gethostbyname2() 関数は BIND バージョン 4.9.4 ではじめて登場しまし た。 |
バグ
これらの関数は静的データ記憶域を使用します。後でこのデータを使う必要があ る場合は、以後のこれらの関数呼び出しでデータが上書きされる前に、コピーし て保存する必要があります。なお、アドレスデータとして受け入れるのは現在、 インターネットアドレスフォーマットだけです。 FreeBSD 10.0 May 25, 1995 FreeBSD 10.0 |