other versions
other sections
GETHOSTBYNAME(3) | Linux Programmer's Manual | GETHOSTBYNAME(3) |
名前¶
gethostbyname, gethostbyaddr, sethostent, gethostent, endhostent, h_errno, herror, hstrerror, gethostbyaddr_r, gethostbyname2, gethostbyname2_r, gethostbyname_r, gethostent_r - ネットワーク上のホストのエントリを取得する書式¶
#include <netdb.h> extern int h_errno;struct hostent *gethostbyname(const char *name);#include <sys/socket.h> /* AF_INET を使う場合 */ struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);void sethostent(int stayopen);void endhostent(void);void herror(const char *s);const char *hstrerror(int err);/* System V/POSIX 拡張 */struct hostent *gethostent(void);/* GNU 拡張 */struct hostent *gethostbyname2(const char *name, int af);int gethostent_r( struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);int gethostbyaddr_r(const void *addr, socklen_t len, int type, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);int gethostbyname_r(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);int gethostbyname2_r(const char *name, int af, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
_BSD_SOURCE || _SVID_SOURCE
- glibc 2.8 以降:
- _BSD_SOURCE || _SVID_SOURCE || _GNU_SOURCE
- glibc 2.8 より前:
- なし
説明¶
gethostbyname*() と gethostbyaddr*() は過去のものである。 アプリケーションでは、代わりに getaddrinfo(3) と getnameinfo(3) を使用すること。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] /* 過去との互換性のため */
hostent 構造体のメンバは以下の通り。
- h_name
- ホストの正式名 (official name)。
- h_aliases
- ホストの別名の配列。配列は NULL ポインタで終端される。
- h_addrtype
- アドレスのタイプ。現在はすべて AF_INET または AF_INET6 である。
- h_length
- バイト単位で表したアドレスの長さ。
- h_addr_list
- ホストのネットワークアドレスへのポインタの配列。 配列は NULL ポインタで終端される。 ネットワークアドレスはネットワークバイトオーダ形式である。
- h_addr
- h_addr_list の最初のアドレス。過去との互換性を保つためのものである。
返り値¶
gethostbyname() および gethostbyaddr() 関数は hostent 構造体を返す。エラーが起こったら NULL ポインタを返す。エラーの際には h_errno 変数がエラーの番号を保持する。 返り値が NULL でない場合、静的データをポインタで指していることもある。 以下の「注意」を参照すること。エラー¶
h_errno 変数は以下の値を取りうる。- HOST_NOT_FOUND
- 指定したホストが見つからない。
- NO_ADDRESS または NO_DATA
- 指定した名前は有効だが IP アドレスを持っていない。
- NO_RECOVERY
- ネームサーバの復旧不能なエラーが起こった。
- TRY_AGAIN
- authoritative なネームサーバで一時的なエラーが起こった。 時間をおいてもう一度試すこと。
ファイル¶
- /etc/host.conf
- 名前解決の設定ファイル
- /etc/hosts
- ホストのデータベースファイル
- /etc/nsswitch.conf
- ネームサービス切替設定
準拠¶
POSIX.1-2001 では、 gethostbyname(), gethostbyaddr(), sethostent(), endhostent(), gethostent(), h_errno が規定されており、 gethostbyaddr() と gethostbyname() は廃止予定であるとされている。 POSIX.1-2008 では gethostbyname(), gethostbyaddr(), h_errno の仕様が削除されている。 代わりに、 getaddrinfo(3) と getnameinfo(3) の使用が推奨されている。注意¶
gethostbyname() および gethostbyaddr() 関数は静的データへのポインタを返す。 このポインタは、その後の呼び出しで上書きされるかもしれない。 hostent 構造体はポインタを含んでいるので、構造体のコピーだけでは不十分である; より深いコピーが必要である。 オリジナルの BSD の実装では、 gethostbyname() の len 引き数は int であった。 SUSv2 標準はバグが多く、 gethostbyaddr() の len パラメータを size_t 型として宣言している。 (これは誤りで、 size_t 型ではなく int 型でなければならない。 POSIX.1-2001 ではこれを socklen_t としているが、これは OK。) accept(2) も参照。 gethostbyaddr() の BSD のプロトタイプは、最初の引き数として const char * を使う。System V/POSIX 拡張¶
POSIX では、 gethostent() が必須とされている。 この関数はホストデータベースの次のエントリを返す。 DNS/BIND を使う場合はあまり意味を持たないが、 ホストデータベースが 1 行ずつ読み込まれるファイルである場合は意味がある。 多くのシステムでは、この名前のルーチンはファイル /etc/hosts を読み込む。 DNS サポートなしでライブラリがビルドされた場合にのみ利用可能である。 glibc 版は ipv6 エントリを無視する。 この関数はリエントラント (reentrant) ではなく、 glibc にはリエントラント版の gethostent_r() が追加された。GNU 拡張¶
glibc2 には gethostbyname2() もあり、 gethostbyname() と同じように動作するが、 こちらはアドレスが属するアドレスファミリーを指定することができる。 glibc2 にはリエントラントな gethostent_r(), gethostbyaddr_r(), gethostbyname_r() と gethostbyname2_r() もある。 呼び出し側は、成功時に結果が格納される hostent 構造体 ret と、大きさ buflen の一時的な作業バッファ buf を提供する。 コール終了後、成功した場合 result は結果を指している。 エラーの場合、またはエントリが見つからなかった場合、 result は NULL になる。 これらの関数は、成功した場合 0 を返し、失敗の場合は 0 以外のエラー番号を返す。 これらの関数のリエントラントでないバージョンが返すエラーに加えて、 これらの関数は、 buf が小さすぎた場合に ERANGE を返す。この場合はもっと大きなバッファを用意して 関数呼び出しを再度行うべきである。 大域変数 h_errno は変更されないが、エラー番号を格納する変数のアドレスが h_errnop に渡される。バグ¶
gethostbyname() は、16進数表現のドット区切りの IPv4 アドレス文字列の要素を認識しない。関連項目¶
getaddrinfo(3), getnameinfo(3), inet(3), inet_ntop(3), inet_pton(3), resolver(3), hosts(5), nsswitch.conf(5), hostname(7), named(8)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2010-10-04 |