names=getaddrinfo
visibility=public
kind=defined

--- getaddrinfo(nodename, servname, family=nil, socktype=nil, protocol=nil, flags=nil) -> Array

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

@param nodename ホスト名を指定します。 必須引数です。 ([[ref:lib:socket#host_format]]を参照)

@param servname サービス名を指定します。 必須引数です。 ([[ref:lib:socket#service_format]]を参照)

@param family アドレスファミリー。[[m:Socket::Constants::AF_INET]] など、AF_ で始まる定数を指定します。

@param socktype ソケットタイプ。 [[m:Socket::Constants::SOCK_STREAM]] など、 SOCK_ で始まる定数を指定します。

@param protocol プロトコル。[[m:Socket::Constants::IPPROTO_IP]] など、IPPROTO_ で始まる定数を指定します。

@param flags [[man:getaddrinfo(3)]] の第3引数に指定する addrinfo 構造体の ai_flags メンバに相当する Fixnum。 Socket::AI_PASSIVEなど。

@return 7つの要素からなるアドレス情報に関する配列を返します。
@raise SocketError [[man:getaddrinfo(3)]]がエラーを返したときに発生する例外です

@see [[m:Addrinfo#getaddrinfo]]


=== アドレス情報について
アドレス情報とは7つの要素からなる次の形の配列です。

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

=== 必須引数について
必須引数の意味は以下の通りです。

  * nodename - ホスト名
    ([[ref:lib:socket#host_format]]を参照)
  * servname - サービス名
    ([[ref:lib:socket#service_format]]を参照)

=== 省略可能な引数について
残りの引数は省略可能です。

  * family - アドレスファミリー。
    [[m:Socket::Constants::AF_INET]] など、AF_ で始まる定数を指定します。
  * socktype - ソケットタイプ。
    [[m:Socket::Constants::SOCK_STREAM]] など、SOCK_ で始まる定数を指定
    します。
  * protocol - プロトコル。
    [[m:Socket::Constants::IPPROTO_IP]] など、IPPROTO_ で始まる定数を指
    定します。
  * 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]]

