電子・情報工学系/システム情報工学研究科CS専攻 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2005/No6_files/getaddrinfo.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2005/
http://www.coins.tsukuba.ac.jp/~yas/
getaddrinfo(3) Linux Programmer's Manual getaddrinfo(3) NAME getaddrinfo - network address and service translation int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; };ライブラリ関数 getaddrinfo() は、第一引数として、ホスト名、第2引数と してポート番号に関連した(/etc/services に含まれている)、第3引数として、 調べたいアドレスの制約に関するヒントを与える。この例では、TCP/IP (IPv4) なので、ai_family としてAF_INET, ai_socktype とし SOCK_STREAM を指定している。(IPv4/IPv6 の両方に対応するには、AF_INET は指定しない 方がよい。)
ライブラリ関数 getaddrinfo() は、与えられた引数から、IP アドレス(やポー ト番号)を調べ、結果を構造体 struct addrinfo に格納して返す。その構造体 は、ヒープ(malloc() されたメモリ)に置かれている。関数 getaddrinfo() は、構造体へのポインタを第4引数で示された番地に保存する(第4引数は、 ポインタを保存するための番地)。
この構造体の中の ai_addr に目的の IP アドレスを組んだstruct sockaddr が含まれている。その構造体を、ai_addrlen バイト数分だけだけ addr 変数 にコピーしている。
1つのホストに複数の IP アドレスが割り当てられている場合もある。その場 合は、ai_next を手繰ればわかる。
ライブラリ関数 getaddrinfo() の内部的では、/etc/hosts というファイル や, NIS の hosts マップ, DNSの名前サーバなどが調べられる。どれがどの順 番で調べられるかは、システムに依存する。 /etc/nsswitch.conf があるシステムでは hosts: の行に書かれている。 /etc/host.conf というファイルがあるホストでは、そのファイルの order という 行による。