singleton method Socket.getnameinfo

getnameinfo(sa, flags = 0) -> Array[permalink][rdoc]

[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"]