getnameinfo(sa, flags = 0) -> Array
[permalink][rdoc][edit]-
[RFC2553] で定義された getnameinfo() の機能を提供するクラスメソッド。 gethostbyaddr() や getservbyport() の代わりとして用意されています。IPのバージョンに依存しないプログラムを書くための標準的なAPIです。
- [PARAM] sa:
- 文字列か配列を与えます。
- [PARAM] flags:
- 省略可能な第2引数 flags には getnameinfo(3) の第7番目の引数に指定する flags に相当する Fixnum を与えます。
- [RETURN]
- 配列を返し、その要素はアドレスとポートを表す文字列です。
- [EXCEPTION] SocketError:
- getnameinfo(3) がエラーを起こした場合に生じる例外
[SEE_ALSO] Addrinfo#getnameinfo
引数 sa について
引数 sa には文字列か配列を与えます。文字列の場合は sockaddr 構造体のパック文字列を与えます。具体的には BasicSocket#getsockname の値が利用できます。配列を与える場合には、要素が3つの場合と4つの場合があります。
- 要素が3つの場合: [アドレスファミリー, サービス, ホスト]
- 要素が4つの場合: [アドレスファミリー, サービス, 任意, アドレスを表す文字列]
アドレスファミリーには Socket::AF_INET 等の定数の他に文字列で "AF_INET" もしくは "AF_INET6" もしくは nil が指定できます。ただしIPv6が使えないようにコンパイルされている場合は "AF_INET6" は無効な指定となります。アドレスファミリーに nil を指定することは Socket::AF_UNSPEC を指定することと等価です。
サービス、ホストの指定に関しては socket/サービス指定形式、 socket/ホスト指定形式を参照してください。
要素が3つの場合でも、ホストにはアドレスを指定できますが、要素が4つの場合には、最後の要素を名前解決しないことが保証されます。
引数flagsについて
省略可能な第2引数 flags には getnameinfo(3) の第7番目の引数に指定する flags に相当する Fixnum を与えます。
引数flagsを構成するための定数として Socket::NI_MAXHOST、 Socket::NI_MAXSERV、 Socket::NI_NOFQDN、 Socket::NI_NUMERICHOST、 Socket::NI_NAMEREQD、 Socket::NI_NUMERICSERV、 Socket::NI_DGRAM が用意されている場合があります。
これらの定数の意味については getnameinfo(3)を参照して下さい。
使用例
require 'socket' Socket.getnameinfo(Socket.sockaddr_in('21','127.0.0.1')) #=> ["localhost", "ftp"] Socket.getnameinfo([nil, 21,'127.0.0.1']) #=> ["localhost", "ftp"]