スポンサーリンク

INET(3) FreeBSD ライブラリ関数マニュアル INET(3)

名称

inet_aton, inet_addr, inet_network, inet_ntoa, inet_ntop, inet_pton, inet_makeaddr, inet_lnaof, inet_netof − インターネットアドレス操作関数

ライブラリ

標準 C ライブラリ (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);

unsigned long

inet_addr(const char *cp);

unsigned long

inet_network(const char *cp);

char *

inet_ntoa(struct in_addr in);

const char *

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

int

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

struct in_addr

inet_makeaddr(unsigned long net, unsigned long lna);

unsigned long

inet_lnaof(struct in_addr in);

unsigned long

inet_netof(struct in_addr in);

解説

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

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

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

inet_ntop() 関数は、ネットワーク形式 (通常 struct in_addr もしくは他の内 部的なバイナリ形式で、ネットワークバイトオーダ) から表示形式 (外部に表示 するのに適した形式) への変換を行います。この関数は、システムエラーが発生 した時 (この場合は errno が設定されます) にはヌルを返し、それ以外の時は目 的の文字列へのポインタを返します。この関数は現在 AF_INET と AF_INET6 に対 して有効です。

inet_ntoa() ルーチンは、インターネットアドレスを受け取り ‘.’ 表記法のアド レスを示す ASCII 文字列を返します。 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 つの部分ア ドレス形式で Class B ネットワークアドレスを ‘‘128.net.host’’ と指定でき、 便利です。

2 個の部分アドレスが与えられると、最後の部分アドレスが 24 ビット値として 解釈されて、ネットワークアドレスの右端の 3 バイトになります。これにより 2 個の部分アドレス形式で Class A ネットワークアドレスを ‘‘net.host’’ と指定 でき、便利です。

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

‘.’ 表記法で ‘‘部分’’ として供給される数値はすべて、C 言語で指定される 10 進数、8 進数、16 進数のいずれかの形式を取ることができます (すなわち、先行 の 0x または 0X は 16 進数を意味し、先行する 0 は 8 進数を意味し、数値は 10 進数と解釈されます) 。

inet_aton() と inet_ntoa() 関数は幾分避けるべき関数で、むしろ addr2ascii(3) ファミリが使われます。しかし、これらの関数はまだ広く実装さ れていないため、当面、移植性のあるプログラムはこれらの関数に依存できず、 inet(3) 関数が使われ続けるでしょう。

診断

inet_addr() と inet_network() は形式違反の要求に対し INADDR_NONE 定数を返 します。

関連項目

addr2ascii(3), gethostbyname(3), getnetent(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 を返す必要があります。

FreeBSD 10.0 June 17, 1996 FreeBSD 10.0

スポンサーリンク