Ruby 2.0.0 リファレンスマニュアル > ライブラリ一覧 > socketライブラリ > Addrinfoクラス
クラスの継承リスト: Addrinfo < Object < Kernel < BasicObject
ソケットのアドレス情報を保持するクラスです。
ホスト/ポート番号/プロトコルなどを同定するために用いられます。 IPv4/IPv6/Unix domain socketなどのアドレス情報を保持することができます。
struct addrinfo に対応します。
foreach(nodename, service, family=nil, socktype=nil, protocol=nil, flags=0) -> Enumerator
[permalink][rdoc]foreach(nodename, service, family=nil, socktype=nil, protocol=nil, flags=0) {|addrinfo| ... } -> [Addrinfo]
Addrinfo.getaddrinfo で得られる配列の各要素を繰り返します。
ブロックを省略した場合は繰り返しをする Enumerator オブジェクト を返します。
getaddrinfo(nodename, service, family=nil, socktype=nil, protocol=nil, flags=0) -> [Addrinfo]
[permalink][rdoc]パラメータから複数の Addrinfo オブジェクトを生成し、その配列を返します。
nodename (ホスト名) と service (ポート番号) を Addrinfo に変換します。 変換先は一意ではないため、複数のオブジェクトを返します。
nodename と service のどちらか一方は nil を渡すことができます (その部分は変換されません)。
family, socktype, protocol には希望する方式のヒントを与えます。 例えば、SOCK_STREAM なソケットが必要な場合には socktype に指定します。 nil を指定した場合には制限しないことを意味します。 IPv6 に制限したい場合には family に PF_INET6 を指定します。
flags には Socket::AI_??? という定数のビット OR を取ります。
アドレスの使い方がわかっている場合には socktype を明示すべきです。 socktype を省略して service を整数で指定した場合にエラーが 生じるプラットフォームが存在します。512 のようなポート番号は socktype なしでは曖昧な指定となるためです。
例:
Addrinfo.getaddrinfo("www.kame.net", 80, nil, :STREAM) #=> [#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net:80)>, # #<Addrinfo: [2001:200:0:8002:203:47ff:fea5:3085]:80 TCP (www.kame.net:80)>]
[SEE_ALSO] Addrinfo.foreach, Socket.getaddrinfo
ip(host) -> Addrinfo
[permalink][rdoc]IP アドレスに対する Addrinfo オブジェクトを返します。
port, socktype, protocol は 0 で初期化されます。 つまりこの返り値はソケットを生成するには不適です。
Addrinfo.ip("localhost") #=> #<Addrinfo: 127.0.0.1 (localhost)>
[SEE_ALSO] Addrinfo.new
new(sockaddr, family=Socket::PF_UNSPEC, socktype=0, protocol=0) -> Addrinfo
[permalink][rdoc]新たな Addrinfo オブジェクトを返します。
sockaddr は connect(2) などで使われるパラメータで、 struct sockaddr に対応します。faimily, socktype, protocol は socket(2) のパラメータに対応します。
sockaddr には文字列もしくは配列を指定します。 配列の場合は IPSocket#addr や UNIXSocket#addr の 値と互換でなければなりません。 文字列の場合は Socket.sockaddr_in や Socket.unpack_sockaddr_un で得られるようなものでなければ なりません。
実際には sockaddr には以下のようなものが使えます。
配列で AF_INET/AF_INET6 を指定した場合、配列の4番目の要素 が実際のIPアドレスとして使われます。配列の3番目の要素は ホスト名ですが Addrinfo#inspect での表示にしか用いられません。
family は Socket::PF_INET のようなプロコルファミリーを指定します。 文字列やシンボル名を指定することができます(PF_ というプレフィクスは 省略することもできます)。例えば :INET, :INET6, :UNIX, "PF_INET" などです。
socktype は Socket::SOCK_STREAM のようなソケットタイプを指定します。 文字列やシンボル名を指定することができます(SOCK_ というプレフィクスは 省略することもできます)。例えば :STREAM, :DGRAM, :RAW, "SOCK_STREAM" などです。
protocol は Socket::IPPROTO_TCP のようなプロトコルを指定します。 family や socktype と異なり、整数でなければなりません。 デフォルト値(0) は raw socket 以外では適切な値です。
tcp(host, port) -> Addrinfo
[permalink][rdoc]TCP アドレスに対する Addrinfo オブジェクトを返します。
Addrinfo.tcp("localhost", "smtp") #=> #<Addrinfo: 127.0.0.1:25 TCP (localhost:smtp)>
udp(host, port) -> Addrinfo
[permalink][rdoc]UDP アドレスに対する Addrinfo オブジェクトを返します。
Addrinfo.udp("localhost", "daytime") #=> #<Addrinfo: 127.0.0.1:13 UDP (localhost:daytime)>
unix(path, socktype=Socket::SOCK_STREAM) -> Addrinfo
[permalink][rdoc]Unix ソケットアドレスに対応する Addrinfo オブジェクトを返します。
socktype でソケットタイプを指定します。
Addrinfo.unix("/tmp/sock") #=> #<Addrinfo: /tmp/sock SOCK_STREAM> Addrinfo.unix("/tmp/sock", :DGRAM) #=> #<Addrinfo: /tmp/sock SOCK_DGRAM>
[SEE_ALSO] Addrinfo.new
afamily -> Integer
[permalink][rdoc]アドレスファミリーを整数で返します。
Addrinfo.tcp("localhost", 80).afamily == Socket::AF_INET #=> true
bind -> Socket
[permalink][rdoc]bind {|sock| ... } -> object
自身のアドレスにバインドされたソケットを作成します。
ブロックが渡されたときにはそのブロックに生成された Socket オブジェクトが渡されます。ブロックの返り値がメソッドの返り値となります。 ブロックを省略した場合は、生成された Socket オブジェクトが返されます。
Addrinfo.udp("0.0.0.0", 9981).bind {|s| s.local_address.connect {|s| s.send "hello", 0 } p s.recv(10) #=> "hello" }
canonname -> String|nil
[permalink][rdoc]カノニカル名を文字列で返します。
カノニカル名が存在しない場合には nil を返します。
カノニカル名は Addrinfo.getaddrinfo に Socket::AI_CANONINAME を指定した場合にセットされます。
list = Addrinfo.getaddrinfo("www.ruby-lang.org", 80, :INET, :STREAM, nil, Socket::AI_CANONNAME) p list[0] #=> #<Addrinfo: 221.186.184.68:80 TCP carbon.ruby-lang.org (www.ruby-lang.org:80)> p list[0].canonname #=> "carbon.ruby-lang.org"
connect -> Socket
[permalink][rdoc]connect {|sock| ... } -> object
自身のアドレスへソケットを接続します。
ブロックが渡されたときにはそのブロックに接続済み Socket オブジェクトが渡されます。ブロックの返り値がメソッドの返り値となります。 ブロックを省略した場合は、接続済み Socket オブジェクトが返されます。
connect_from(host, port) -> Socket
[permalink][rdoc]connect_from(host, port) {|sock| ... } -> object
引数で指定されたアドレスから 自身のアドレスへソケットを接続します。
接続元のアドレスは Addrinfo#family_addrinfo により生成された ものが用いられます。
ブロックが渡されたときにはそのブロックに接続済み Socket オブジェクトが渡されます。ブロックの返り値がメソッドの返り値となります。 ブロックを省略した場合は、接続済みSocket オブジェクトが返されます。
引数で指定したアドレスはソケット接続のローカル側のアドレスになります。
Addrinfo.tcp("www.ruby-lang.org", 80).connect_from("0.0.0.0", 4649) {|s| s.print "GET / HTTP/1.0\r\nHost: www.ruby-lang.org\r\n\r\n" puts s.read }
connect_to(host, port) -> Socket
[permalink][rdoc]connect_to(host, port) {|sock| ... } -> object
自身のアドレスから指定したホストへソケット接続します。
接続元のアドレスは Addrinfo#family_addrinfo により生成された ものが用いられます。
ブロックが渡されたときにはそのブロックに接続済み Socket オブジェクトが渡されます。ブロックの返り値がメソッドの返り値となります。 ブロックを省略した場合は、接続済み Socket オブジェクトが返されます。
family_addrinfo(host, port) -> Addrinfo
[permalink][rdoc]family_addrinfo(path) -> Addrinfo
引数から自身に「似た」Addrinfo オブジェクトを生成します。
「似た」の意味はプロトコルファミリ、ソケットタイプ、プロトコルが 同じことを意味します。
Addrinfo.tcp("0.0.0.0", 4649).family_addrinfo("www.ruby-lang.org", 80) #=> #<Addrinfo: 221.186.184.68:80 TCP (www.ruby-lang.org:80)> Addrinfo.unix("/tmp/sock").family_addrinfo("/tmp/sock2") #=> #<Addrinfo: /tmp/sock2 SOCK_STREAM>
getnameinfo(flags=0) -> [String, String]
[permalink][rdoc]ノード名とサービスを文字列の配列で返します。
flags には Socket::NI_??? という名前の定数のビット OR を渡します。
Addrinfo.tcp("127.0.0.1", 80).getnameinfo #=> ["localhost", "www"] Addrinfo.tcp("127.0.0.1", 80).getnameinfo(Socket::NI_NUMERICSERV) #=> ["localhost", "80"]
[SEE_ALSO] Socket.getnameinfo
inspect_sockaddr -> String
[permalink][rdoc]アドレスやポート番号などの情報を人間に読める形の文字列で返します。
Addrinfo.tcp("localhost", 80).inspect_sockaddr #=> "127.0.0.1:80" Addrinfo.tcp("ip6-localhost", 80).inspect_sockaddr #=> "[::1]:80" Addrinfo.unix("/tmp/sock").inspect_sockaddr #=> "/tmp/sock"
ip? -> bool
[permalink][rdoc]アドレスが IP (v4/v6) のものならば true を返します。
Addrinfo.tcp("127.0.0.1", 80).ip? #=> true Addrinfo.tcp("::1", 80).ip? #=> true Addrinfo.unix("/tmp/sock").ip? #=> false
[SEE_ALSO] Addrinfo#ipv4?, Addrinfo#ipv6?, Addrinfo#unix?
ip_address -> String
[permalink][rdoc]IP アドレスを文字列で返します。
Addrinfo.tcp("127.0.0.1", 80).ip_address #=> "127.0.0.1" Addrinfo.tcp("::1", 80).ip_address #=> "::1"
[SEE_ALSO] Addrinfo#ip_port, Addrinfo#ip_unpack
ip_port -> Integer
[permalink][rdoc]ポート番号を整数で返します。
Addrinfo.tcp("127.0.0.1", 80).ip_port #=> 80 Addrinfo.tcp("::1", 80).ip_port #=> 80
[SEE_ALSO] Addrinfo#ip_address, Addrinfo#ip_unpack
ip_unpack -> [String, Integer]
[permalink][rdoc]IP アドレスとポート番号を 2 要素の配列で返します。
Addrinfo.tcp("127.0.0.1", 80).ip_unpack #=> ["127.0.0.1", 80] Addrinfo.tcp("::1", 80).ip_unpack #=> ["::1", 80]
[SEE_ALSO] Addrinfo#ip_address, Addrinfo#ip_port
ipv4? -> bool
[permalink][rdoc]アドレスが IPv4 のものならば true を返します。
[SEE_ALSO] Addrinfo#ip?, Addrinfo#ipv6?
Addrinfo.tcp("127.0.0.1", 80).ipv4? #=> true Addrinfo.tcp("::1", 80).ipv4? #=> false Addrinfo.unix("/tmp/sock").ipv4? #=> false
ipv4_loopback? -> bool
[permalink][rdoc]IPv4 のループバックアドレス(127.0.0.0/8) であれば真を返します。
[SEE_ALSO] Addrinfo#ipv6_loopback?
ipv4_multicast? -> bool
[permalink][rdoc]IPv4 のマルチキャストアドレス(224.0.0.0/4)であれば真を返します。
ipv4_private? -> bool
[permalink][rdoc]IPv4 のプライベートアドレス(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) であれば真を返します。
ipv6? -> bool
[permalink][rdoc]アドレスが IPv6 のものならば true を返します。
Addrinfo.tcp("127.0.0.1", 80).ipv6? #=> false Addrinfo.tcp("::1", 80).ipv6? #=> true Addrinfo.unix("/tmp/sock").ipv6? #=> false
[SEE_ALSO] Addrinfo#ipv4?, Addrinfo#ip?
ipv6_linklocal? -> bool
[permalink][rdoc]IPv6 のリンクローカルアドレス(ff80::/10)であれば真を返します。
ipv6_loopback? -> bool
[permalink][rdoc]IPv6 のループバックアドレス(::1)であれば真を返します。
[SEE_ALSO] Addrinfo#ipv4_loopback?
ipv6_mc_global? -> bool
[permalink][rdoc]IPv6 のマルチキャスト(グローバルスコープ) アドレスであれば真を返します。
ipv6_mc_linklocal? -> bool
[permalink][rdoc]IPv6 のマルチキャスト(リンクローカルスコープ)アドレスであれば真を返します。
ipv6_mc_nodelocal? -> bool
[permalink][rdoc]IPv6 のマルチキャスト(ノードローカルスコープ)アドレスであれば真を返します。
ipv6_mc_orglocal? -> bool
[permalink][rdoc]IPv6 のマルチキャスト(組織(organization)ローカルスコープ) アドレスであれば真を返します。
ipv6_mc_sitelocal? -> bool
[permalink][rdoc]IPv6 のマルチキャスト(サイトローカルスコープ)アドレスであれば真を返します。
ipv6_multicast? -> bool
[permalink][rdoc]IPv6 のマルチキャストアドレス(ff00::/8)であれば真を返します。
ipv6_sitelocal? -> bool
[permalink][rdoc]IPv6 のサイトローカルアドレス(ffc0::/10)であれば真を返します。
ipv6_to_ipv4 -> Addrinfo|nil
[permalink][rdoc]IPv6 の v4 マップド/互換アドレスを v4 のアドレスに変換します。
それ以外のアドレスの場合 nil を返します。
Addrinfo.ip("::192.0.2.3").ipv6_to_ipv4 #=> #<Addrinfo: 192.0.2.3> Addrinfo.ip("::ffff:192.0.2.3").ipv6_to_ipv4 #=> #<Addrinfo: 192.0.2.3> Addrinfo.ip("::1").ipv6_to_ipv4 #=> nil Addrinfo.ip("192.0.2.3").ipv6_to_ipv4 #=> nil Addrinfo.unix("/tmp/sock").ipv6_to_ipv4 #=> nil
ipv6_unique_local? -> bool
[permalink][rdoc]IPv6 のユニークローカルアドレス(fc00::/7, [RFC4193])であれば真を返します。
ipv6_unspecified? -> bool
[permalink][rdoc]IPv6 の不特定アドレス(unspecified address)(::)であれば真を返します。
ipv6_v4compat? -> bool
[permalink][rdoc]IPv6 の v4互換アドレス(::/80)であれば真を返します。
ipv6_v4mapped? -> bool
[permalink][rdoc]IPv6 の v4にマップされたアドレス(::ffff:0:0/80)であれば真を返します。
listen(backlog=5) -> Socket
[permalink][rdoc]listen(backlog=5) {|sock| ... } -> object
自身のアドレスにバインドされたソケットを作成し、 listen(2) を実行します。
ブロックが渡されたときにはそのブロックに生成された Socket オブジェクトが渡されます。ブロックの返り値がメソッドの返り値となります。 ブロックを省略した場合は、生成された Socket オブジェクトが返されます。
pfamily -> Integer
[permalink][rdoc]プロトコルファミリーを整数で返します。
Addrinfo.tcp("localhost", 80).pfamily == Socket::PF_INET #=> true
protocol -> Integer
[permalink][rdoc]ソケットプロトコルを整数で返します。
Addrinfo.tcp("localhost", 80).protocol == Socket::IPPROTO_TCP #=> true
socktype -> Integer
[permalink][rdoc]ソケットタイプを整数で返します。
Addrinfo.tcp("localhost", 80).socktype == Socket::SOCK_STREAM #=> true
to_sockaddr -> String
[permalink][rdoc]to_s -> String
struct sockaddr をパックした形式の文字列に変換します。
Addrinfo.tcp("localhost", 80).to_sockaddr #=> "\x02\x00\x00P\x7F\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
unix? -> bool
[permalink][rdoc]アドレスが Unix domain socket のものならば true を返します。
Addrinfo.tcp("127.0.0.1", 80).unix? #=> false Addrinfo.tcp("::1", 80).unix? #=> false Addrinfo.unix("/tmp/sock").unix? #=> true
[SEE_ALSO] Addrinfo#ip?
unix_path -> String
[permalink][rdoc]Unix domain socket の path を文字列で返します。
Addrinfo.unix("/tmp/sock").unix_path #=> "/tmp/sock"