Man page - getnameinfo(3)

Packages contains this manual

Available languages:

en fr pl ja ru

Manual

GETNAMEINFO

名 前
書 式
説 明
国 際 化 ド メ イ ン 名 の た め の getnameinfo() の 拡 張
返 り 値
フ ァ イ ル
バ ー ジ ョ ン
属 性
準 拠
注 意

関 連 項 目
こ の 文 書 に つ い て

名 前

getnameinfo - ア ド レ ス か ら 名 前 へ の 変 換 を プ ロ ト コ ル に 依 存 し な い か た ち で 行 う

書 式

#include <sys/socket.h>
#include <netdb.h>

int getnameinfo(const struct sockaddr * addr , socklen_t addrlen ,
char *
host , socklen_t hostlen ,
char *
serv , socklen_t servlen , int flags );

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 ( feature_test_macros (7) 参 照 ):

getnameinfo ():
glibc 2.22 以 降 : _POSIX_C_SOURCE >= 200112L
glibc 2.21 以 前 : _POSIX_C_SOURCE

説 明

getnameinfo () 関 数 は 、 getaddrinfo (3) の 逆 の 動 作 を 行 う 。 つ ま り 、 プ ロ ト コ ル に 依 存 し な い か た ち で ソ ケ ッ ト ア ド レ ス か ら 対 応 す る ホ ス ト 名 と サ ー ビ ス へ の 変 換 を 行 う 。 こ の 関 数 は gethostbyaddr (3) と getservbyport (3) の 機 能 を 一 つ に し た も の だ が 、 こ れ ら の 関 数 と 違 い 、 getnameinfo (3) は リ エ ン ト ラ ン ト で あ り 、 IPv4 と IPv6 の 差 分 に 依 存 し な い か た ち で プ ロ グ ラ ム を 書 く こ と が で き る 。

addr 引 数 は 、 IP ア ド レ ス と ポ ー ト 番 号 の 情 報 を 保 持 し て い る 汎 用 的 な ソ ケ ッ ト ア ド レ ス 構 造 体 ( sockaddr_in 型 ま た は sockaddr_in6 型 ) へ の ポ イ ン タ ー で あ る 。 addrlen addr の サ イ ズ で あ る 。 host serv 引 数 は 、 (そ れ ぞ れ サ イ ズ が hostlen servlen の ) 呼 び 出 し 側 で 確 保 さ れ た バ ッ フ ァ ー へ の ポ イ ン タ ー で あ り 、 ホ ス ト 名 と サ ー ビ ス 名 を 含 む ヌ ル 終 端 さ れ た 文 字 列 が そ れ ぞ れ の バ ッ フ ァ ー に 格 納 さ れ る 。

ホ ス ト 名 が 不 要 で あ る こ と を こ の 関 数 に 伝 え る に は 、 host に NULL を 指 定 す る か 、 hostlen に 0 を 指 定 す る 。 同 様 に 、 サ ー ビ ス 名 が 不 要 な 場 合 は 、 serv に NULL を 指 定 す る か 、 servlen に 0 を 指 定 す る 。 し か し 、 ホ ス ト 名 と サ ー ビ ス 名 の 両 方 を 不 要 だ と 指 定 す る こ と は で き な い (い ず れ か 一 方 は 要 求 す る こ と )。

flags 引 数 で getnameinfo () の 動 作 を 変 え る こ と が で き る 。 指 定 で き る 値 は 以 下 の 通 り :
NI_NAMEREQD

指 定 す る と 、 ホ ス ト 名 が 決 定 で き な か っ た 場 合 に エ ラ ー を 返 す 。

NI_DGRAM

指 定 す る と 、 ス ト リ ー ム ベ ー ス (TCP) で な く デ ー タ グ ラ ム ベ ー ス (UDP) の サ ー ビ ス を 対 象 に す る 。 数 は 少 な い が 、 UDP と TCP で 違 う サ ー ビ ス を 提 供 し て い る ポ ー ト (512–514) に 対 し て 必 要 と な る 。

NI_NOFQDN

指 定 す る と 、 ロ ー カ ル な ホ ス ト に は fully qualified domain name (FQDN) の ホ ス ト 名 の 部 分 の み を 返 す 。

NI_NUMERICHOST

指 定 す る と 、 数 値 形 式 の ホ ス ト 名 が 返 さ れ る 。 (指 定 し な く て も 、 ノ ー ド の 名 前 が 決 定 で き な い 場 合 は 数 値 形 式 が 返 る こ と が あ る )。

NI_NUMERICSERV

指 定 す る と 、 数 値 形 式 の サ ー ビ ス 名 (例 え ば ポ ー ト 番 号 ) が 返 さ れ る (指 定 し な く て も 、 サ ー ビ ス 名 が 決 定 で き な い 場 合 は 数 値 形 式 が 返 る こ と が あ る )。

国 際 化 ド メ イ ン 名 の た め の getnameinfo() の 拡 張

glibc 2.3.4 か ら 、 getnameinfo () に 拡 張 が 行 わ れ 、 ホ ス ト 名 と 国 際 化 ド メ イ ン 名 (Internationalized Domain Name; IDN) 形 式 と の 間 で 透 過 的 な 変 換 が で き る よ う に な っ て い る (IDN 形 式 に つ い て は RFC 3490 の Internationalizing Domain Names in Applications (IDNA) を 参 照 )。 3つ の フ ラ グ が 新 た に 定 義 さ れ て い る :

NI_IDN

こ の フ ラ グ を 指 定 す る と 、 必 要 で あ れ ば 、 検 索 処 理 で 見 つ か っ た 名 前 は IDN 形 式 か ら ロ ケ ー ル に 応 じ た 符 号 化 形 式 に 変 換 さ れ る 。 ASCII 文 字 だ け の 名 前 は こ の 変 換 で は 影 響 を 受 け な い 。 こ の た め 、 既 存 の プ ロ グ ラ ム や 環 境 で こ の フ ラ グ を 使 う こ と が で き る 。

NI_IDN_ALLOW_UNASSIGNED , NI_IDN_USE_STD3_ASCII_RULES

こ れ ら の フ ラ グ を セ ッ ト す る と 、 IDNA 処 理 で 使 用 さ れ る フ ラ グ IDNA_ALLOW_UNASSIGNED (未 割 り 当 て の Unicode の コ ー ド ポ イ ン ト を 許 容 ) と IDNA_USE_STD3_ASCII_RULES (出 力 が STD3 準 拠 の ホ ス ト 名 か を チ ェ ッ ク す る ) が そ れ ぞ れ 有 効 に な る 。

返 り 値

成 功 す る と 0 が 返 り 、 (要 求 さ れ て い れ ば ) ノ ー ド と サ ー ビ ス の 名 前 が ヌ ル 終 端 さ れ た 文 字 列 の 形 式 で そ れ ぞ れ の 指 定 バ ッ フ ァ ー に 返 さ れ る (バ ッ フ ァ ー の 長 さ に あ う よ う に 縮 め ら れ る か も し れ な い )。 エ ラ ー の 場 合 は 、 以 下 の 0 以 外 の エ ラ ー コ ー ド が 返 さ れ る :
EAI_AGAIN

指 定 さ れ た 名 前 が 現 時 点 で は 解 決 で き な か っ た 。 後 で 再 試 行 し て み る こ と 。

EAI_BADFLAGS

flags 引 数 に 不 正 な 値 が 与 え ら れ た 。

EAI_FAIL

回 復 で き な い エ ラ ー が 発 生 し た 。

EAI_FAMILY

指 定 し た ア ド レ ス フ ァ ミ リ ー が 認 識 で き な か っ た 。 あ る い は ア ド レ ス の 長 さ が 指 定 さ れ た フ ァ ミ リ ー に 合 う も の で な か っ た 。

EAI_MEMORY

メ モ リ ー が 足 り な い 。

EAI_NONAME

与 え ら れ た パ ラ メ ー タ ー で は 名 前 が 解 決 で き な い 。 NI_NAMEREQD が 設 定 さ れ て い た が ホ ス ト 名 が 決 定 で き な か っ た か 、 ホ ス ト 名 も サ ー ビ ス 名 も 要 求 さ れ な か っ た 。

EAI_OVERFLOW

host ま た は serv が 指 し て い る バ ッ フ ァ ー が 小 さ す ぎ た 。

EAI_SYSTEM

シ ス テ ム エ ラ ー が 起 っ た 。 エ ラ ー コ ー ド は errno に 設 定 さ れ る 。

gai_strerror (3) 関 数 を 使 う と 、 こ れ ら の エ ラ ー コ ー ド を 、 エ ラ ー レ ポ ー ト に 適 し た 人 間 が 読 み や す い 文 字 列 に 翻 訳 し て く れ る 。

フ ァ イ ル

/etc/hosts
/etc/nsswitch.conf
/etc/resolv.conf

バ ー ジ ョ ン

getnameinfo () は 、 glibc バ ー ジ ョ ン 2.1 以 降 で 提 供 さ れ て い る 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 は attributes (7) を 参 照 の こ と 。

Image grohtml-23856-1.png

準 拠

POSIX.1-2001, POSIX.1-2008, RFC 2553.

注 意

適 切 な バ ッ フ ァ ー サ イ ズ を 選 択 で き る よ う に 、 <netdb.h> に 以 下 の 定 数 が 定 義 さ れ て い る 。

#define NI_MAXHOST 1025
#define NI_MAXSERV 32

Since glibc 2.8, these definitions are exposed only if suitable feature test macros are defined, namely: _GNU_SOURCE , _DEFAULT_SOURCE (since glibc 2.19), or (in glibc versions up to and including 2.19) _BSD_SOURCE or _SVID_SOURCE .

前 者 は 、 最 近 の バ ー ジ ョ ン の BIND の ヘ ッ ダ ー フ ァ イ ル <arpa/nameser.h> 中 の 定 数 MAXDNAME と 同 じ 値 で あ る 。 後 者 は 、 割 り 当 て 済 の 数 値 に つ い て 記 し た 現 在 の RFC に 列 挙 さ れ て サ ー ビ ス か ら 推 量 し た 値 で あ る 。

glibc バ ー ジ ョ ン 2.2 よ り 前 で は 、 引 数 hostlen , servlen の 型 は size_t で あ っ た 。

以 下 の コ ー ド は 、 指 定 さ れ た ソ ケ ッ ト ア ド レ ス に 対 す る ホ ス ト と サ ー ビ ス の 数 値 表 式 を 取 得 し よ う と 試 み る 。 特 定 の ア ド レ ス フ ァ ミ リ ー に 対 す る 参 照 情 報 は 一 切 ハ ー ド コ ー ド さ れ て い な い こ と に 着 目 し て ほ し い 。

struct sockaddr *addr; /* input */
socklen_t addrlen; /* input */
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];

if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);

以 下 で は ソ ケ ッ ト ア ド レ ス に 逆 向 き の ア ド レ ス マ ッ ピ ン グ が 存 在 す る か を チ ェ ッ ク し て い る 。

struct sockaddr *addr; /* input */
socklen_t addrlen; /* input */
char hbuf[NI_MAXHOST];

if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf),
NULL, 0, NI_NAMEREQD))
printf("could not resolve hostname");
else
printf("host=%s\n", hbuf);

getnameinfo () を 使 っ た プ ロ グ ラ ム 例 が getaddrinfo (3) に 記 載 さ れ て い る 。

関 連 項 目

accept (2), getpeername (2), getsockname (2), recvfrom (2), socket (2), getaddrinfo (3), gethostbyaddr (3), getservbyname (3), getservbyport (3), inet_ntop (3), hosts (5), services (5), hostname (7), named (8)

R. Gilligan, S. Thomson, J. Bound and W. Stevens, Basic Socket Interface Extensions for IPv6 , RFC 2553, March 1999.

Tatsuya Jinmei and Atsushi Onoe, An Extension of Format for IPv6 Scoped Addresses , internet draft, work in progress ftp://ftp.ietf.org/internet-drafts/draft-ietf-ipngwg-scopedaddr-format-02.txt .

Craig Metz, Protocol Independence Using the Sockets API , Proceedings of the freenix track: 2000 USENIX annual technical conference, June 2000 http://www.usenix.org/publications/library/proceedings/usenix2000/freenix/metzprotocol.html .

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。