GETHOSTBYNAME(3)

名前
gethostbyname, gethostbyaddr, sethostent, endhostent, herror - ネットワークホストのエントリを取得する

書式
#include <netdb.h>
extern int h_errno;

struct hostent *gethostbyname(const char *name);

#include <sys/socket.h>        /* for AF_INET */
struct hostent *gethostbyaddr(const char *addr, int len, int type);

void sethostent(int stayopen);

void endhostent(void);

void herror(const char *s);

説明
gethostbyname() 関数は与えられたホスト名 name に対応する構造体 hostent を返す。ここで name はホスト名、ドット区切りの IPv4 アドレス、コロン区切りの (ドッ ト区切りでも大丈夫かもしれない) IPv6 アドレスのいずれかである。 IPv6 アドレスの記述については RFC 1884 を参考にしてほしい。 name が IPv4 か IPv6 のアドレスだった場合には、名前引き (lookup) は 行われず、 gethostbyname() は単に name そのまま h_name フィールドにコピーし、 name を struct in_addr 形式で表したデータを h_addr_list[0] フィールドに入れて、 hostent 構造体を返す。 struct in_addr name がドットで終了していて、かつ環境変数 HOSTALIASES が設定されている場合は、まず HOSTALIASES で指定されているファイルから name のエントリが検索される (ファイルのフォーマットについては hostname(7) を参照のこと)。 name がドットで終了していなければ現在のドメインとその親ドメインが検索される。

gethostbyaddr() 関数は与えられたホストアドレス addr (長さ len、 タイプ type) に対応する構造体 hostent を返す。現在用いることのできるタイプは AF_INET のみである。

sethostent() 関数は、ネームサーバーへの接続様式を指定する。 stayopen が真 (1) ならば、ネームサーバーへの問い合わせには、接続された TCP ソケッ トを用い、連続した問い合わせの間に接続を維持する。偽ならばネームサーバー への問い合わせに UDP データグラムを用いる。

endhostent() 関数はネームサーバーへの問い合わせに用いた TCP 接続の利用を終了する。

herror() 関数は現在の h_errno に対応するエラーメッセージを stderr に出力する。

gethostbyname() と gethostbyaddr() によって実行されるドメイン名の問い合わせでは、ネームサーバー named(8)、 /etc/hosts のデータ行、および Network Information Service (NIS または YP) のいずれか、あるいはすべてが用いられる。これは /etc/host.conf の order 行の内容に依存する (詳しくは resolv+(8) を見よ)。 デフォルトではまず named (8) に問い合わせ、次いで /etc/hosts を閲覧する。

hostent 構造体は <netdb.h> 中で以下のように定義されている:

    struct hostent {
    	char	*h_name;		/* official name of host */
    	char	**h_aliases;		/* alias list */
    	int	h_addrtype;		/* host address type */
    	int	h_length;		/* length of address */
    	char	**h_addr_list;		/* list of addresses */
    }
    #define h_addr	h_addr_list[0]		/* for backward compatibility */

hostent 構造体のメンバは以下の通り。

h_name
    ホストの正式名 (official name)。

h_aliases
    ホストの別名からなる配列。 0 で終端する。

h_addrtype
    アドレスのタイプ。現在はすべて AF_INET である。

h_length
    バイト単位で表したアドレスの長さ。

h_addr_list
    ホストのネットワークアドレスをネットワークバイトオーダーで表した配列。 0 で終端する。

h_addr
    h_addr_list の最初のアドレス。過去との互換性を保つためのものである。

返り値
gethostbyname() および gethostbyaddr 関数は hostent 構造体を返す。エラーが起こったら NULL ポインタを返す。エラーの際には h_errno 変数がエラーの番号を保持する。

エラー
h_errno 変数は以下の値を取りうる。

HOST_NOT_FOUND
    指定したホストが見つからない。

NO_ADDRESS
    指定した名前は有効だが IP アドレスを持っていない。

NO_RECOVERY
    ネームサーバーの復旧不能なエラーが起こった。

TRY_AGAIN
    aurhoritative なネームサーバーで一時的なエラーが起こった。時間をおいて もう一度試すこと。

ファイル

/etc/host.conf
    名前解決の設定ファイル

/etc/hosts
    ホストのデータベースファイル

準拠
BSD 4.3

関連項目
resolver(3), hosts(5), hostname(7), resolv+(8), named(8)