getipnodebyname - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
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);
説明
これらの関数は推奨されない。代わりに getaddrinfo (3) と getnameinfo (3) を使うこと。
getipnodebyname
(3) 関数と
getipnodebyaddr
(3)関数は、ネットワークホストの名前とアドレスを返す。
これらの関数は、以下の構造体へのポインタを返す。
struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list;};
これらの関数は、 IPv4 ネットワークアドレスファミリにしかアクセスできない gethostbyname (3) や gethostbyaddr (3)を置き換えるものである。 getipnodebyname (3) 関数と getipnodebyaddr (3)関数は複数のネットワークアドレスファミリーにアクセス可能になっている。
これらの関数は、 gethostby の関数群と異なり、動的に割り当てられたメモリへのポインタを返す。 呼び出し元がこれらの hostent 構造体を必要としなくなった後は、 freehostent (3)関数を用いれば動的な割り当てメモリを解放できる。
getipnodebyname の引き数
getipnodebyname (3) 関数は 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 (3)関数は、ネットワークアドレスが addr 引き数で指定されたホストの名前を引く。 af 引き数には以下の値のいずれかを指定する。
- AF_INET
- addr 引き数は struct in_addr へのポインターであり、 len 引き数は sizeof(struct in_addr) に設定しなければならない。
- AF_INET6
- addr 引き数は struct in6_addr へのポインターであり、 len 引き数は sizeof(struct in6_addr) に設定しなければならない。
返り値
エラーが起こるとヌル・ポインターが返され、 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 (3) または getipnodebyaddr (3)に与えられた 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
- これはひとつ以上のポインターの配列で、 それぞれのポインターは、 そのネットワークホストに対応するネットワークアドレス構造体を指す。 この配列はヌル・ポインターで終端する。
注意
これらの関数は glibc 2.1.91-95 に存在したが、再び削除された。 いくつかの Unix 風システムはこれらの関数に対応しているが、 これらの関数は全て推奨されない。
準拠
RFC2553.