IPSocket

インターネットドメインソケットの抽象クラス。 通常のIOクラスのサブクラスと同様の入出力ができます。

スーパークラス:

クラスメソッド:

IPSocket.getaddress(host)

ホスト名からホストのアドレスを返します。ホストのアドレスは文 字列はdotted quadの文字列(例:127.0.0.1)です。

p IPSocket.getaddress("www.ruby-lang.org")        #=> "210.163.138.100"

メソッド:

addr

ソケットの接続情報を表す配列を返します。配列の各要素は第1要 素が文字列 "AF_INET", "AF_INET6" など、第2要素がport番号、第3要素がホストを表 す文字列、第4要素がホストのIPアドレスを表す文字列 (dotted quad) です。 *1

serv = TCPServer.new("localhost", 0)
p serv.addr         #=> ["AF_INET", 46102, "localhost.localdomain", "127.0.0.1"]
c = TCPSocket.new(*serv.addr.values_at(3,1))
s = serv.accept
peeraddr

接続相手先ソケットの情報を表す配列を返します。配列の各要素は IPSocket#addrメソッドが返す配列 と同じです。

TCPSocket.open("localhost", "http") {|s|
  p s.peeraddr    #=> ["AF_INET", 80, "localhost.localdomain", "127.0.0.1"]
  p s.addr        #=> ["AF_INET", 52615, "localhost.localdomain", "127.0.0.1"]
}
recvfrom(maxlen[, flags])

recvと同様にソケットからデータを受け取りますが、 戻り値は文字列と相手ソケットのアドレス(形式は IPSocket#addr参照)のペアです。引数につ いてはBasicSocket#recvと同様です。

s1 = UDPSocket.new
s1.bind("0.0.0.0", 0) # 適当に空いている port を割り当てる
s2 = UDPSocket.new
s2.send("foo", 0, s1.getsockname)
mesg, inet_addr = s1.recvfrom(100)
p mesg            #=> "foo"
p inet_addr       #=> ["AF_INET", 32876, "localhost.localdomain", "127.0.0.1"]

*1接続先の情報はaddrではなくpeeraddrです。注意。trap::Socket



rubyist ML