getipnodebyname, getipnodebyaddr, freehostent -
ネットワークホストの名前とアドレスの取得
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
struct hostent *getipnodebyname(const char *name, int af,
int flags, int *error_num);
struct hostent *getipnodebyaddr(const void *addr, size_t len,
int af, int *error_num);
void freehostent(struct hostent *ip);
これらの関数は非推奨である
(glibc
では利用できない)。
代わりに
getaddrinfo(3) と
getnameinfo(3) を使うこと。
getipnodebyname() と
getipnodebyaddr()
は、ネットワークホストの名前とアドレスを返す。
これらの関数は、以下の構造体へのポインタを返す。
struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
};
これらの関数は、 IPv4
ネットワークアドレスファミリにしかアクセスできない
gethostbyname(3) や
gethostbyaddr(3)
を置き換えるものである。
getipnodebyname() 関数と
getipnodebyaddr()
関数は複数のネットワークアドレスファミリーにアクセス可能になっている。
これらの関数は、
gethostby
の関数群と異なり、動的に割り当てられたメモリへのポインタを返す。
呼び出し元がこれらの
hostent
構造体を必要としなくなった後は、
freehostent()
関数を用いれば動的な割り当てメモリを解放できる。
getipnodebyname() の引き数¶
getipnodebyname() 関数は
name
引き数で指定されたホストのネットワークアドレスを引く。
af
引き数には以下の値のいずれかを指定する。
- AF_INET
- name
引き数は、ドットで 4
つに区切られた IPv4
アドレスか、 IPv4
ネットワークホストの名前へのポインタである。
- AF_INET6
- name 引き数は、16 進の
IPv6 アドレスか、 IPv6
ネットワークホストの名前へのポインタである。
flags
パラメータには追加のオプションを指定する。
複数のフラグを指定するには、それらのビット単位の
OR
をとって指定すればよい。
オプションをひとつも指定したくないときには、
flags に 0
を設定する必要がある。
- AI_V4MAPPED
- このフラグは AF_INET6
と共に用いられ、IPv6
アドレスの代わりに
IPv4
アドレスを問い合わせる。
問い合わせる IPv4
アドレスは IPv6
アドレスにマップされる。
- AI_ALL
- このフラグは AI_V4MAPPED
と共に用いられ、IPv4
アドレスと IPv6
アドレスの両方を問い合わせる。
見つかった IPv4
アドレスは、すべて
IPv6
アドレスにマップされる。
- AI_ADDRCONFIG
- このフラグは AF_INET6
と共に用いられ、 IPv6
が割り当てられたネットワークインターフェースが
システムにひとつもなければ
IPv6
アドレスの問い合わせを行わず、
IPv4
が割り当てられたネットワークインターフェースが
システムにひとつもなければ
IPv4
アドレスの問い合わせを行わないように要求する。
このフラグは単独でも、あるいは
AI_V4MAPPED
フラグと共にでも用いることができる。
- AI_DEFAULT
- このフラグは
(AI_ADDRCONFIG|AI_V4MAPPED)
と等価である。
getipnodebyaddr() の引き数¶
getipnodebyaddr()
関数は、ネットワークアドレスが
addr
引き数で指定されたホストの名前を引く。
af
引き数には以下の値のいずれかを指定する。
- AF_INET
- addr 引き数は struct in_addr
へのポインターであり、
len 引き数は sizeof(struct
in_addr)
に設定しなければならない。
- AF_INET6
- addr 引き数は struct in6_addr
へのポインターであり、
len 引き数は sizeof(struct
in6_addr)
に設定しなければならない。
返り値¶
エラーが起こると NULL
が返され、
error_num
に以下にリストされたエラーコードのいずれかが設定される。
- HOST_NOT_FOUND
- ホスト名またはネットワークアドレスが見つからなかった。
- NO_ADDRESS
- ドメインネームサーバーは
そのネットワークアドレスまたはネットワーク名を認識したが、
返事が返ってこなかった。原因としては、
例えば IPv4
アドレスしか持たないネットワークホストに対して
IPv6
の情報の問い合わせが行われた
(およびその逆)
などが考えられる。
- NO_RECOVERY
- ドメインネームサーバーから恒久的な失敗
(permanent failure)
を意味する返事が返された。
- TRY_AGAIN
- ネームサーバーから一時的な失敗
(temporary failure)
を意味する返事が返された。次にはもうちょっと運が必要かも。
問い合わせに成功すると、
hostent
構造体へのポインタが返される。
この構造体は以下のフィールドからなる。
- h_name
- これはこのネットワークホストのオフィシャルな名前である。
- h_aliases
- これは、そのホストのオフィシャルでない別名へのポインターの配列である。
配列はヌルポインターで終端する。
- h_addrtype
- これは getipnodebyname() または
getipnodebyaddr() に与えられた
af
引き数のコピーである。
af 引き数が AF_INET なら
h_addrtype は常に AF_INET
になり、 af
引き数が AF_INET6 なら
h_addrtype も常に AF_INET6
になる。
- h_length
- このフィールドは、
h_addrtype が AF_INET なら
sizeof(struct in_addr) に、 h_addrtype が
AF_INET6 なら sizeof(struct in6_addr)
に設定される。
- h_addr_list
- これはひとつ以上のポインターの配列で、
それぞれのポインターは、
そのネットワークホストに対応するネットワークアドレス構造体を指す。
この配列はヌルポインターで終端する。
RFC 2553.
これらの関数は glibc 2.1.91-95
に存在したが、再び削除された。
いくつかの UNIX
風システムはこれらの関数に対応しているが、
これらの関数は全て推奨されない。
関連項目¶
getaddrinfo(3),
getnameinfo(3),
inet_ntop(3),
inet_pton(3)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.65 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。