GETHOSTBYNAME(3) — NEWS-OS Programmer’s Manual
名称
gethostbyname, gethostbyaddr, gethostent, sethostent, endhostent, herror − ネットワークのホストエントリを獲得する
形式
#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()
herror(string)
char ∗string;
extern int _host_verify;
解説
gethostbyname および gethostbyaddr はそれぞれ、以下の構造体を指すポインタを返します。 この構造体は、ネームサーバ (named(8)) または NIS (ypserv(8)) から得た情報、あるいは /etc/hosts ファイルのある行の内容のいずれかを含みます。 これらの関数がどのようにして情報を得るかは、 /etc/resolv.conf (resolver(5) 参照) の内容に依存します。
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 中の最初のアドレス。 これは、旧バージョンとの互換性のためのものです。
gethostbyname は、もし名前にドットが含まれておらず、別名ファイルの名前が環境変数 “HOSTALIASES”に設定されていた場合には、 入力された名前が別名に一致するかどうか、最初に別名ファイルを 検索します。 また指定されたホストがドットで終っていない場合には、 デフォルトドメインおよびその上位ドメインが検索されます。 別名ファイルのフォーマットとドメイン検索の手順に関しては hostname(7) を参照して下さい。
もし、 gethostbyaddr をオーセンティケーション以外の用途に使用する場合は、外部変数 _host_verify にゼロを代入してから呼び出しを行うことによって、 確認のためのオーバヘッドを避けることができます。 デフォルトではネームサーバから得られた応答の場合は gethostbyname を用いて確認します。
gethostent は、NIS または /etc/hosts ファイルの情報をひとつずつ順に取り出します。 ただし、 /etc/resolv.conf (resolver(5) 参照) で bind が指定されている場合は、 gethostent は常に NULL を返します。 local と nis の両方が指定されている場合は、両方のデータがマージされているものとして 動作します。
sethostent によって gethostent はデータの先頭から読み直します。 また stayopen フラグがゼロでない値の場合、ネームサーバ使用時に問い合わせに TCP を使用し、さらに gethostbyname や gethostbyaddr の呼び出しの後、 そのコネクションを保持するためのオプションを設定します。 それ以外の場合はネームサーバへの問い合わせには UDP が用いられます。
endhostent は、データファイルあるいは TCP コネクションをクローズします。
診断
gethostbyname と gethostbyaddr でエラーが生じた時は、ナルポインタが返されます。 それが一時的なエラーであるのか、無効な引数によるものであったのか、 未知のホストであったのかは、外部変数 h_errno によって調べることができます。
h_errno は、次の値をもっています。
HOST_NOT_FOUNDそのようなホストは知りません。
TRY_AGAIN一般に、これは一時的なエラーであり、 ローカルサーバが正式なサーバからの応答を受信できなかったことを 意味します。 しばらくしてからリトライすると、成功するかもしれません。
NO_RECOVERYサーバ側で予期できないエラーが発生しました。 これは回復不可能なエラーです。
NO_DATA要求された名前は有効だが、IP アドレスをもっていません。 これは、一時的なエラーではありません。 例えば、メイルフォワーダだけが定義されている場合などで、 ネームサーバへ別のタイプのリクエストをすると、 答えがでることを意味します。
関連ファイル
/etc/hosts, /etc/resolv.conf
関連事項
resolver(3), hosts(5), resolver(5), hostname(7), named(8)
バグ
すべての情報は静的領域に含まれるので、それをセーブする場合は、 コピーしなければなりません。 インタネットアドレスのフォーマットだけが、 現在のところサポートされています。
NEWS-OSRelease 4.2.1R