名 前
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.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。