|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > g > getnameinfo - ライブラリコールの説明 getnameinfo - ライブラリコールの説明 - Linux コマンド集 一覧表名前getnameinfo - アドレスから名前への変換をプロトコルに依存しないかたちで行う 書式
#include <sys/socket.h>#include <netdb.h> 説明
getnameinfo(3)
関数は、アドレスからノード名への変換を
プロトコルに依存しないかたちで行うために規定された。
この関数は
gethostbyaddr
(3)と
getservbyport
(3)の機能を一つにしたもので、
getaddrinfo
(3) と逆の動作を行う。
sa
引き数は、
IP アドレスとポート番号の情報を保持している
汎用的なソケットアドレス構造体
(
sockaddr_in
型または
sockaddr_in6
型) へのポインターである。
salen
は
sa
のサイズである。
host
と
serv
引き数は、(それぞれサイズが
hostlen
と
servlen
の) バッファへのポインターであり、
ここに結果の値が格納される。
返り値成功すると 0 が返り、(要求されていれば) ノードとサービスの名前が NULL 終端された文字列の形式でそれぞれの指定バッファに返される (バッファの長さにあうように縮められるかもしれない)。 エラーの場合は、以下の 0 以外のエラー・コードが返される:
ファイル
/etc/hosts
注意
適切なバッファサイズを選択できるように、
<netdb.h>
に以下の定数が定義されている。
# define NI_MAXHOST 1025 前者は、最近のバージョンの BIND のヘッダファイル <arpa/nameser.h> 中の定数 MAXDNAME と同じ値である。 後者は、割り当て済の数値について記した現在の RFC に 列挙されてサービスから推量した値である。 例
以下のコードは、指定されたソケットアドレスに対する
ホストとサービスの数値表式を取得しようと試みる。
特定のアドレスファミリーに対する参照情報は
一切ハードコードされていないことに着目してほしい。
struct sockaddr *sa; /* input */ char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV]; 以下ではソケットアドレスに 逆向きのアドレスマッピングが存在するかをチェックしている。 struct sockaddr *sa; /* input */ char hbuf[NI_MAXHOST]; if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf), NULL, 0, NI_NAMEREQD)) printf("could not resolve hostname"); else printf("host=%s\n", hbuf); 準拠RFC2553, POSIX.1-2001. 関連項目getaddrinfo (3), gethostbyaddr (3), getservbyname (3), getservbyport (3), inet_ntop (3), socket (3), hosts (5), services (5), hostname (7), named (8) R. Gilligan, S. Thomson, J. Bound and W. Stevens, Basic Socket Interface Extensions for IPv6 ,RFC2553, 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
|
|