1 .\" This page is in the public domain.
2 .\" Almost all details are from RFC 2553.
4 .\" 2004-12-14, mtk, Added EAI_OVERFLOW error
5 .\" 2004-12-14 Fixed description of error return
7 .\" Translated 2005-02-26, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
8 .\" Updated 2007-01-07, Akihiro MOTOKI, LDP v2.43
9 .\" Updated 2008-08-11, Akihiro MOTOKI, LDP v3.05
10 .\" Updated 2010-04-10, Akihiro MOTOKI, LDP v3.24
12 .TH GETNAMEINFO 3 2009-12-03 "GNU" "Linux Programmer's Manual"
14 getnameinfo \- アドレスから名前への変換をプロトコルに依存しないかたちで行う
17 .B #include <sys/socket.h>
20 .BI "int getnameinfo(const struct sockaddr *" "sa" ", socklen_t " "salen" ,
21 .BI " char *" "host" ", size_t " "hostlen" ,
22 .BI " char *" "serv" ", size_t " "servlen" ", int " "flags" );
27 .RB ( feature_test_macros (7)
33 _POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE
39 の逆の動作を行う。つまり、プロトコルに依存しないかたちで
40 ソケットアドレスから対応するホスト名とサービスへの変換を行う。
48 はリエントラントであり、IPv4 と IPv6 の差分に依存しないかたちで
53 IP アドレスとポート番号の情報を保持している
70 の) 呼び出し側で確保されたバッファへのポインタであり、
71 ホスト名とサービス名を含む NULL 終端された文字列が
74 ホスト名が不要であることをこの関数に伝えるには、
78 に 0 を指定する。同様に、サービス名が不要な場合は、
83 しかし、ホスト名とサービス名の両方を不要だと指定することはできない
89 の動作を変えることができる。指定できる値は以下の通り:
92 指定すると、ホスト名が決定できなかった場合にエラーを返す。
95 指定すると、ストリームベース (TCP) でなくデータグラムベース (UDP)
97 UDP と TCP で違うサービスを提供しているポート
101 指定すると、ローカルなホストには fully qualified domain name (FQDN) の
105 指定すると、数値形式のホスト名が返される。
107 .\" .BR gethostbyaddr ()
111 (指定しなくても、ノードの名前が決定できない場合は数値形式が返ることがある)。
112 .\" POSIX.1-2003 has NI_NUMERICSCOPE, but glibc doesn't have it.
115 指定すると、数値形式のサービス名 (例えばポート番号) が返される
116 (指定しなくても、サービス名が決定できない場合は数値形式が返ることがある)。
117 .SS "国際化ドメイン名のための getnameinfo() の拡張"
122 国際化ドメイン名 (Internationalized Domain Name; IDN) 形式との間で
124 (IDN 形式については RFC 3490 の
125 .I "Internationalizing Domain Names in Applications (IDNA)"
126 を参照)。3つのフラグが新たに定義されている:
129 このフラグを指定すると、必要であれば、検索処理で見つかった名前は
130 IDN 形式からロケールに応じた符号化形式に変換される。
131 ASCII 文字だけの名前はこの変換では影響を受けない。このため、
132 既存のプログラムや環境でこのフラグを使うことができる。
134 .BR NI_IDN_ALLOW_UNASSIGNED ", " NI_IDN_USE_STD3_ASCII_RULES
135 これらのフラグをセットすると、IDNA 処理で使用されるフラグ
136 IDNA_ALLOW_UNASSIGNED (未割り当ての Unicode のコードポイントを許容) と
137 IDNA_USE_STD3_ASCII_RULES (出力が STD3 準拠のホスト名かをチェックする)
140 .\" FIXME glibc defines the following additional errors, some which
141 .\" can probably be returned by getnameinfo(); they need to
144 .\" #define EAI_INPROGRESS -100 /* Processing request in progress. */
145 .\" #define EAI_CANCELED -101 /* Request canceled. */
146 .\" #define EAI_NOTCANCELED -102 /* Request not canceled. */
147 .\" #define EAI_ALLDONE -103 /* All requests done. */
148 .\" #define EAI_INTR -104 /* Interrupted by a signal. */
149 .\" #define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
151 成功すると 0 が返り、(要求されていれば) ノードとサービスの名前が
152 NULL 終端された文字列の形式でそれぞれの指定バッファに返される
153 (バッファの長さにあうように縮められるかもしれない)。
154 エラーの場合は、以下の 0 以外のエラー・コードが返される:
157 指定された名前が現時点では解決できなかった。
168 指定したアドレスファミリーが認識できなかった。
169 あるいはアドレスの長さが指定されたファミリーに合うものでなかった。
175 与えられたパラメータでは名前が解決できない。
177 が設定されていたがホスト名が決定できなかったか、
193 関数を使うと、これらのエラー・コードを、エラー・レポートに適した
203 は、glibc バージョン 2.1 以降で提供されている。
205 RFC\ 2553, POSIX.1-2001.
213 #define NI_MAXHOST 1025
214 #define NI_MAXSERV 32
218 glibc 2.8 以降では、機能検査マクロ
222 のいずれかが定義された場合にのみ、これらの定義が公開される。
224 前者は、最近のバージョンの BIND のヘッダファイル
229 後者は、割り当て済の数値について記した現在の RFC に
232 以下のコードは、指定されたソケットアドレスに対する
233 ホストとサービスの数値表式を取得しようと試みる。
234 特定のアドレスファミリーに対する参照情報は
235 一切ハードコードされていないことに着目してほしい。
239 struct sockaddr *sa; /* input */
240 socklen_t len; /* input */
241 char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
243 if (getnameinfo(sa, len, hbuf, sizeof(hbuf), sbuf,
244 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0)
245 printf("host=%s, serv=%s\en", hbuf, sbuf);
250 逆向きのアドレスマッピングが存在するかをチェックしている。
254 struct sockaddr *sa; /* input */
255 socklen_t len; /* input */
256 char hbuf[NI_MAXHOST];
258 if (getnameinfo(sa, len, hbuf, sizeof(hbuf),
259 NULL, 0, NI_NAMEREQD))
260 printf("could not resolve hostname");
262 printf("host=%s\en", hbuf);
277 .BR gethostbyaddr (3),
278 .BR getservbyname (3),
279 .BR getservbyport (3),
286 R. Gilligan, S. Thomson, J. Bound and W. Stevens,
287 .IR "Basic Socket Interface Extensions for IPv6" ,
288 RFC\ 2553, March 1999.
290 Tatsuya Jinmei and Atsushi Onoe,
291 .IR "An Extension of Format for IPv6 Scoped Addresses" ,
292 internet draft, work in progress.
293 ftp://ftp.ietf.org/internet\-drafts/draft\-ietf\-ipngwg\-scopedaddr\-format\-02.txt
296 .IR "Protocol Independence Using the Sockets API" ,
297 Proceedings of the freenix track:
298 2000 USENIX annual technical conference, June 2000.
299 http://www.usenix.org/publications/library/proceedings/usenix2000/freenix/metzprotocol.html