Scroll to navigation

GETIPNODEBYNAME(3) Linux Programmer's Manual GETIPNODEBYNAME(3)

名前

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 引き数には以下の値のいずれかを指定する。

name 引き数は、ドットで 4 つに区切られた IPv4 アドレスか、 IPv4 ネットワークホストの名前へのポインタである。
name 引き数は、16 進の IPv6 アドレスか、 IPv6 ネットワークホストの名前へのポインタである。

flags パラメータには追加のオプションを指定する。 複数のフラグを指定するには、それらの論理 OR をとって指定すればよい。 オプションをひとつも指定したくないときには、 flags に 0 を設定する必要がある。

このフラグは AF_INET6 と共に用いられ、IPv6 アドレスの代わりに IPv4 アドレスを問い合わせる。 問い合わせる IPv4 アドレスは IPv6 アドレスにマップされる。
このフラグは AI_V4MAPPED と共に用いられ、IPv4 アドレスと IPv6 アドレスの両方を問い合わせる。 見つかった IPv4 アドレスは、すべて IPv6 アドレスにマップされる。
このフラグは AF_INET6 と共に用いられ、 IPv6 が割り当てられたネットワークインターフェースが システムにひとつもなければ IPv6 アドレスの問い合わせを行わず、 IPv4 が割り当てられたネットワークインターフェースが システムにひとつもなければ IPv4 アドレスの問い合わせを行わないように要求する。 このフラグは単独でも、あるいは AI_V4MAPPED フラグと共にでも用いることができる。
このフラグは (AI_ADDRCONFIG|AI_V4MAPPED) と等価である。

getipnodebyaddr() の引き数

getipnodebyaddr() 関数は、ネットワークアドレスが addr 引き数で指定されたホストの名前を引く。 af 引き数には以下の値のいずれかを指定する。

addr 引き数は struct in_addr へのポインターであり、 len 引き数は sizeof(struct in_addr) に設定しなければならない。
addr 引き数は struct in6_addr へのポインターであり、 len 引き数は sizeof(struct in6_addr) に設定しなければならない。

返り値

エラーが起こるとヌル・ポインターが返され、 error_num に以下にリストされたエラーコードのいずれかが設定される。

ホスト名またはネットワークアドレスが見つからなかった。
ドメインネームサーバーは そのネットワークアドレスまたはネットワーク名を認識したが、 返事が返ってこなかった。原因としては、 例えば IPv4 アドレスしか持たないネットワークホストに対して IPv6 の情報の問い合わせが行われた (およびその逆) などが考えられる。
ドメインネームサーバーから恒久的な失敗 (permanent failure) を意味する返事が返された。
ネームサーバーから一時的な失敗 (temporary failure) を意味する返事が返された。次にはもうちょっと運が必要かも。

問い合わせに成功すると、 hostent 構造体へのポインタが返される。 この構造体は以下のフィールドからなる。

これはこのネットワークホストのオフィシャルな名前である。
これは、そのホストのオフィシャルでない別名へのポインターの配列である。 配列はヌル・ポインターで終端する。
これは getipnodebyname() または getipnodebyaddr() に与えられた af 引き数のコピーである。 af 引き数が AF_INET なら h_addrtype は常に AF_INET になり、 af 引き数が AF_INET6 なら h_addrtype も常に AF_INET6 になる。
このフィールドは、 h_addrtypeAF_INET なら sizeof(struct in_addr) に、 h_addrtypeAF_INET6 なら sizeof(struct in6_addr) に設定される。
これはひとつ以上のポインターの配列で、 それぞれのポインターは、 そのネットワークホストに対応するネットワークアドレス構造体を指す。 この配列はヌル・ポインターで終端する。

準拠

RFC 2553.

注意

これらの関数は glibc 2.1.91-95 に存在したが、再び削除された。 いくつかの Unix 風システムはこれらの関数に対応しているが、 これらの関数は全て推奨されない。

関連項目

getaddrinfo(3), getnameinfo(3), inet_ntop(3), inet_pton(3)

2007-11-15 Linux