GETHOSTBYNAME(3N) — UNIX Programmer’s Manual
名称
gethostbyname, gethostbyaddr, gethostent, sethostent, endhostent − ネットワークのホストエントリを獲得する
形式
#include <netdb.h>
extern int h_errno;
struct hostent ∗gethostbyname(name)
char ∗name;
struct hostent ∗gethostbyaddr(addr, len, type)
char ∗addr; int len, type;
struct hostent ∗gethostent()
sethostent(stayopen)
int stayopen;
endhostent()
解説
gethostbyname および gethostbyaddr はそれぞれ、次の構造体をもつオブジェクトを指すポインタを返します。 この構造体は、ネームサーバ named(8) から得た情報、または /etc/hosts ファイル中の行からの broken-out フィールドのいずれかを含みます。 ローカルなネームサーバがこれらのルーチンを実行していない場合は、 /etc/hosts ファイルを調べます。
structhostent {
char ∗h_name; /∗ ホストの公式名 ∗/
char ∗∗h_aliases; /∗ 別名リスト ∗/
int h_addrtype; /∗ ホストのアドレスの型 ∗/
int h_length; /∗ アドレス長 ∗/
char ∗∗h_addr_list; /∗ ネームサーバからのアドレスリスト ∗/
};
#defineh_addr h_addr_list[0] /∗ 旧バージョンとの互換性のためのアドレス ∗/
この構造体のメンバは、次の通りです。
h_name ホストの公式名。
h_aliases ホストの代名のゼロで終わる文字列。
h_addrtype 返されているアドレスのタイプ。現在のところ常に AF_INET。
h_length バイト単位でのアドレス長。
h_addr_list ホストのネットワークアドレスのゼロで終わる文字列。 ホストアドレスは、ネットワークのバイトオーダーで返されます。
h_addr h_addr_list 中の最初のアドレス。 これは、旧バージョンとの互換性のためのものです。
sethostent は、TCP を使用して、接続されたソケットの使用についてのリクエストを 許可します。 stayopen フラグがゼロでない値の場合、これは、TCP を使用して、 すべての照会をネームサーバへ送るためのオプション、および gethostbyname と gethostbyaddr へのそれぞれの呼び出しの後、 コネクションを保持するためのオプションを設定します。
endhostent は、TCP コネクションをクローズします。
診断
gethostbyname と gethostbyaddr からのエラーリターン状態は、ナルポインタのリターンにより示されます。 外部整数 h_errno をチェックし、それは一時的な故障であるのか、無効であるのか、 未知のホストであるあるのかを調べます。
h_errno は、次の値をもっています。
HOST_NOT_FOUNDそのようなホストは知りません。
TRY_AGAIN一般に、これは一時的なエラーであり、 ローカルサーバが正式なサーバからの応答を受信しないことを意味します。 しばらくしてから、リトライすると、成功するでしょう。
NO_RECOVERYこれは回復不可能なエラーです。
NO_ADDRESS要求された名前は有効だが、IP アドレスをもっていません。 これは、一時的なエラーではありません。 これは、ネームサーバへ、別のタイプのリクエストをすると、 答えがでることを意味します。
ファイル
/etc/hosts
関連事項
hosts(5), resolver(3), named(8)
警告
gethostent を定義し、 sethostent と endhostent を再定義したとき、 /etc/hosts ファイルを調べるためのルーチンだけを使用するために libc が構築されます。 libc はネームサーバではありません。
gethostent は、 /etc/hosts ファイルの次の行を読み込み、 必要に応じそのファイルをオープンします。
sethostent を再定義し、ファイルをオープンし、ファイルの先頭にポインタを移します。 stayopen 引数がゼロでない値の場合は、ホストのデータベースは、 gethostbyname または gethostbyaddr へのそれぞれの呼び出しの後でクローズされません。 endhostent を再定義し、ファイルをクローズします。
バグ
すべての情報は静的領域に含まれるので、それをセーブする場合は、 コピーしなければなりません。 インタネットアドレスのフォーマットだけが、 現在のところサポートされています。
NEWS-OSRelease 3.3