EN JA
INET(3)
INET(3) FreeBSD Library Functions Manual INET(3)

名称

inet_aton, inet_addr, inet_network, inet_ntoa, inet_ntoa_r, inet_ntop, inet_pton, inet_makeaddr, inet_lnaof, inet_netofインターネットアドレス操作ルーチン

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/types.h>
#include < sys/socket.h>
#include < netinet/in.h>
#include < arpa/inet.h>

int
inet_aton( const char *cp, struct in_addr *pin);

in_addr_t
inet_addr( const char *cp);

in_addr_t
inet_network( const char *cp);

char *
inet_ntoa( struct in_addr in);

char *
inet_ntoa_r( struct in_addr in, char *buf, socklen_t size);

const char *
inet_ntop( int af, const void * restrict src, char * restrict dst, socklen_t size);

int
inet_pton( int af, const char * restrict src, void * restrict dst);

struct in_addr
inet_makeaddr( in_addr_t net, in_addr_t lna);

in_addr_t
inet_lnaof( struct in_addr in);

in_addr_t
inet_netof( struct in_addr in);

解説

ルーチン inet_aton(), inet_addr() および inet_network() は、インターネット標準の‘ .’記法で表される数値を表現している文字列を解釈します。

inet_pton() 関数は、表示形式のアドレス (すなわち文字列で保持されている印字可能な形式) からネットワーク形式 (通常、 struct in_addr またはネットワークバイト順の他の内部のバイナリ表現) へ変換します。アドレスが指定されたアドレスファミリで有効であれば 1 を返し、アドレスが指定されたアドレスファミリで解析できなければ 0 を返します。また、システムエラーが発生した時 (この場合は、 errno が設定されます) には、-1 を返します。この関数は、 AF_INETAF_INET6 に現在有効です。

inet_aton() ルーチンは、指定された文字列をインターネットアドレスとして解釈し、指定された構造体にアドレスを入れます。文字列が成功裡に解釈されると 1 を返し、文字列が無効のとき 0 を返します。 inet_addr() と inet_network() 関数は、それぞれ、インターネットアドレスとインターネットネットワーク番号として使うのに適した数値を返します。

関数 inet_ntop() は、ネットワーク形式 (通常、 struct in_addr またはネットワークバイト順の他の内部のバイナリ形式) から表示形式 (外部に表示目的に適した) へアドレス *src を変換します。 size 引数は、バッファ *dst のサイズをバイト単位で指定します。 INET_ADDRSTRLENINET6_ADDRSTRLEN は、それぞれのタイプのアドレスを変換するために必要な最大サイズを定義します。システムエラーが発生した時 (この場合は、 errno が設定されます) は、NULL を返し、それ以外の時は、目的の文字列へのポインタを返します。この関数は、 AF_INETAF_INET6 に現在有効です。

ルーチン inet_ntoa() は、インターネットアドレスを受け取り‘ .’記法のアドレスを表す ASCII 文字列を返します。ルーチン inet_ntoa_r() は、 inet_ntoa() のリエントラントバージョンです。ルーチン inet_makeaddr() は、インターネットネットワーク番号とローカルネットワークアドレスを受け取り、それからインターネットアドレスを構築します。ルーチン inet_netof() と inet_lnaof() は、インターネットホストアドレスを分解して、それぞれネットワーク番号とローカルネットワークアドレス部として返します。

すべてのインターネットアドレスは、ネットワーク順 (左から右へのバイト順) で返されます。すべてのネットワーク番号とローカルアドレス部分は、マシンバイト順の整数値で返されます。

インターネットアドレス

.’記法で使われる値の仕様は、次の形式のうちの一つを取ります。

a.b.c.d 
a.b.c 
a.b 
a

4 つの部分が指定されると、各々は、1 バイトのデータと解釈され、インターネットアドレスの 4 バイトとして左から右に割り当てられます。インターネットアドレスが VAX 上で 32 ビットの整数量であると見なされるとき、上記に該当するバイトは、“ d.c.b.a”として現されることに注意して下さい。すなわち、 VAX のバイトは、右から左の順になります。

3 つの部分が指定されると、最後の部分は、16 ビット量と解釈されて、ネットワークアドレスの右端の 2 バイトになります。これは、3 つの部分アドレス形式を“ 128.net.host”として Class B ネットワークアドレスを指定するときに便利です。

2 つの部分が供給されると、最後の部分は、24 ビットの量として解釈され、ネットワークアドレスの右端の 3 バイトになります。これは、2 つの部分アドレス形式を“ net.host”として Class A ネットワークアドレスを指定するときに便利です。

1 つの部分だけ指定されると、値は、バイトの再調整なしに直接ネットワークアドレスに格納されます。

.’記法で“部分”として供給される全ての数値は、C 言語で指定される 10 進数、8 進数、16 進数にできます。 (すなわち、先行する 0x または 0X は、16 進数を意味し、先行する 0 は、8 進数を意味し、その他は、10 進数と解釈されます)。

診断

inet_addr() と inet_network() は、不正な形式の要求に対し INADDR_NONE 定数を返します。

エラー

関数 inet_ntop() 呼び出しは、次の場合に失敗します:
[ ENOSPC]
size は、アドレスの表示形式を格納するために十分大きくありません。
[ EAFNOSUPPORT]
*src は、 AF_INET または AF_INET6 ファミリのアドレスではありません。

関連項目

byteorder(3), getaddrinfo(3), gethostbyname(3), getnameinfo(3), getnetent(3), inet_net(3), hosts(5), networks(5) IP Version 6 Addressing Architecture, RFC, 2373, July 1998.

規格

inet_ntop() と inet_pton() 関数は、 X/Open Networking Services Issue 5.2 (“XNS5.2”) に適合しています。 inet_pton() 関数は、1、2もしくは 3 つのドット形式のアドレスを受け付けないことに注意してください。すべて 4 つの部分で指定しなければなりませんし、10 進数値のみ解釈されます。これは、 inet_aton() が受け付けるものより狭い入力セットです。

歴史

これらの関数は、 4.2BSD で登場しました。

バグ

INADDR_NONE (0xffffffff) は、有効なブロードキャストアドレスですが、 inet_addr() は、失敗を示す値として返します。新しい inet_aton() 関数では、この問題は、解決されています。ホストバイト順対ネットワークバイト順の問題は、混乱しがちです。 inet_ntoa() で返される文字列は、静的メモリ領域に存在します。

inet_addr() 関数は、 struct in_addr を返すべきです。

June 14, 2007 FreeBSD