names=new
visibility=public
kind=defined

--- new(sockaddr, family=Socket::PF_UNSPEC, socktype=0, protocol=0) -> Addrinfo

新たな Addrinfo オブジェクトを返します。

sockaddr は [[man:connect(2)]] などで使われるパラメータで、
struct sockaddr に対応します。faimily, socktype, protocol
は [[man:socket(2)]] のパラメータに対応します。

sockaddr には文字列もしくは配列を指定します。
配列の場合は [[m:IPSocket#addr]] や [[m:UNIXSocket#addr]] の
値と互換でなければなりません。
文字列の場合は [[m:Socket.sockaddr_in]] や
[[m:Socket.unpack_sockaddr_un]] で得られるようなものでなければ
なりません。

実際には sockaddr には以下のようなものが使えます。
  * ["AF_INET", 46102, "localhost.localdomain", "127,0,0,1"]
  * ["AF_INET6", 42304, "ip6-localhost", "::1"]
  * ["AF_UNIX", "/tmp/sock"]
  * Socket.sockaddr_in("smtp", "2001:DB8::1")
  * Socket.sockaddr_in(80, "172.18.22.42")
  * Socket.sockaddr_in(80, "www.ruby-lang.org")
  * Socket.sockaddr_un("/tmp/sock")

配列で AF_INET/AF_INET6 を指定した場合、配列の4番目の要素
が実際のIPアドレスとして使われます。配列の3番目の要素は
ホスト名ですが [[m:Addrinfo#inspect]] 
での表示にしか用いられません。

family は [[m:Socket::PF_INET]] のようなプロコルファミリーを指定します。
文字列やシンボル名を指定することができます(PF_ というプレフィクスは
省略することもできます)。例えば :INET, :INET6, :UNIX, "PF_INET" などです。

socktype は [[m:Socket::SOCK_STREAM]] のようなソケットタイプを指定します。
文字列やシンボル名を指定することができます(SOCK_ というプレフィクスは
省略することもできます)。例えば :STREAM, :DGRAM, :RAW, "SOCK_STREAM" などです。

protocol は [[m:Socket::IPPROTO_TCP]] のようなプロトコルを指定します。
family や socktype と異なり、整数でなければなりません。
デフォルト値(0) は raw socket 以外では適切な値です。

@param sockaddr ソケットのアドレス(配列もしくは文字列)
@param family プロトコルファミリー(整数、文字列、シンボル)
@param socktype ソケットタイプ(整数、文字列、シンボル)
@param protocol プロトコル(整数)
@raise SocketError 不適なファミリーやソケットタイプなどを渡した場合に発生します

