UNIXSocket

UNIXドメインのストリーム型ソケットのクラス。通常の IOクラスのサブクラスと同様の 入出力ができます。

スーパークラス:

クラスメソッド:

UNIXSocket.open(path)
UNIXSocket.new(path)

pathで指定したパス名を用いて接続したソケットを返 します。

UNIXSocket.pair([type[, protocol]]) (ruby 1.7 feature)
UNIXSocket.socketpair([type[, protocol]]) (ruby 1.7 feature)

相互に結合されたUNIXソケットのペアを含む2要素の配列を返します。 type が省略された場合、Socket::SOCK_STREAM が使われます。 protocol が省略された場合、0 が使われます。

メソッド:

addr

ソケットの接続情報を表す配列を返します。配列の各要素は第1要 素が文字列 "AF_UNIX"、第2要素がパスを表す文字列です。

UNIXServer.open("/tmp/s") {|serv|
  p serv.addr     #=> ["AF_UNIX", "/tmp/s"]
}
path

UNIXソケットのパスを返します。

UNIXServer.open("/tmp/s") {|serv|
  p serv.path     #=> "/tmp/s"
}
peeraddr

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

UNIXServer.open("/tmp/s") {|serv|
  c = UNIXSocket.open("/tmp/s")
  p c.peeraddr    #=> ["AF_UNIX", "/tmp/s"]
}
recvfrom(maxlen[, flags])

recvと同様にソケットからデータを受け取りますが、 戻り値は文字列と相手ソケットのパスのペアです。引数につい てはrecvと同様です。

UNIXServer.open("/tmp/s") {|serv|
  c = UNIXSocket.open("/tmp/s")
  s = serv.accept
  s.send "a", 0
  p c.recvfrom(10)[0]     #=> "a"
}
recv_io([klass[, mode]]) (ruby 1.7 feature)

ソケットの接続先からファイルディスクリプタを受け取ります。

klass が nil の場合、ファイルディスクリプタが Fixnum として 返されます。

klass が nil でない場合、 klass.for_fd(fd[, mode]) が呼ばれ、その値が返されます。 klass が省略された場合は IO が指定されたものとみなされ、 IO.for_fd(fd[, mode]) が呼ばれます。

s1, s2 = UNIXSocket.pair         
s1.send_io STDOUT
io = s2.recv_io
p File.identical?(io, STDOUT)     #=> true
send_io(io) (ruby 1.7 feature)

IO や Fixnum に対応するファイルディスクリプタをソケットの接続先に送ります。



rubyist ML