kind=defined
names=getaddrinfo
visibility=public

--- getaddrinfo(nodename, servname[, family[, socktype[, protocol[, flags]]]])

[[RFC:2553]]で定義された
getaddrinfo() の機能を提供するクラスメソッド。この関数は
gethostbyname() や getservbyname() の代わりとして用意されており、
IP のバージョンに依存しないプログラムを書くための標準的な API です。

アドレス情報の配列を返します。アドレス情報とは7つの要素からなる次の
形の配列です。

  * 第0要素 - アドレスファミリー (String)
  * 第1要素 - ポート番号 (Integer)
  * 第2要素 - ホスト名 (String)
  * 第3要素 - アドレス (String)
  * 第4要素 - アドレスファミリーに対応する Integer
  * 第5要素 - ソケットタイプに対応する Integer
  * 第6要素 - プロトコルに対応する Integer

必須引数の意味は以下の通りです。

  * nodename - ホスト名
    ([[m:socket#ホスト指定形式]]を参照)
  * servname - サービス名
    ([[m:socket#サービス指定形式]]を参照)

残りの引数は省略可能です。

  * family - アドレスファミリー。
    Socket::AF_INET など、
    [[m:Socket::Constants#アドレスファミリー]]にある定数を指定します。
  * socktype - ソケットタイプ。
    Socket::SOCK_STREAM など、
    [[m:Socket::Constants#ソケットタイプ]]にある定数を指定します。
  * protocol - プロトコル。
    Socket::IPPROTO_IP など、
    [[m:Socket::Constants#プロトコル]]にある定数を指定します。
  * flags - [[man:getaddrinfo(3)]] の第3引数に指定する addrinfo 構造体の
    ai_flags メンバに相当する Fixnum。
    Socket::AI_PASSIVE、
    Socket::AI_CANONNAME、
    Socket::AI_NUMERICHOST
    が用意されている場合があります。

引数に指定できる定数の意味については
[[man:getaddrinfo(3)]] を参照して下さい。

例:

  p Socket.getaddrinfo(Socket.gethostname, "ftp")
  #=> [["AF_INET", 21, "helium.ruby-lang.org", "210.251.121.214", 2, 1, 6]]
  
  pp Socket.getaddrinfo(Socket.gethostname, nil)
  #=> [["AF_INET", 0, "helium.ruby-lang.org", "210.251.121.214", 2, 1, 6],
  #    ["AF_INET", 0, "helium.ruby-lang.org", "210.251.121.214", 2, 2, 17],
  #    ["AF_INET", 0, "helium.ruby-lang.org", "210.251.121.214", 2, 3, 0]]

