UNIX ドメインのストリーム型ソケットのクラス。
通常の IO クラスのサブクラスと同様の入出力ができます。
open(path) -> UNIXSocket
[permalink][rdoc]new(path) -> UNIXSocket
open(path) {|sock| ...} -> object
new(path) {|sock| ...} -> object
path で指定したパス名を用いてソケットを接続します。
ブロックを省略すると接続したソケットを返します。
ブロックを渡した場合は、接続したソケットを引数としてそのブロックを呼びだし、ブロック終了時にソケットを閉じます。この場合にはブロックの評価値を返り値として返します。
require 'socket' s = UNIXSocket.new("/tmp/sock") s.send("hello", 0)
pair(type=Socket::SOCK_STREAM, protocol=0) -> [UNIXSocket, UNIXSocket]
[permalink][rdoc]socketpair(type=Socket::SOCK_STREAM, protocol=0) -> [UNIXSocket, UNIXSocket]
相互に結合された UNIX ソケットのペアを含む2要素の配列を返します。
type にはソケットタイプを指定します。 Socket::SOCK_STREAM, Socket::SOCK_DGRAM, Socket::SOCK_RAW などの整数、:STREAM, :DGRAM, :RAW などのシンボル、 "STREAM" などの文字列が渡せます。
protocol には プロトコルを指定します。0 は Unix domain でのデフォルト値が使われます。
require 'socket' s1, s2 = UNIXSocket.pair s1.send "a", 0 s1.send "b", 0 p s2.recv(10) #=> "ab"
addr -> [String, String]
[permalink][rdoc]ソケットの接続情報を表す配列を返します。配列の各要素は第1要素が文字列 "AF_UNIX"、第2要素がパスを表す文字列です。
クライアント側はパスを持たないため空文字列となります。例:
require 'socket' UNIXServer.open("/tmp/s") {|serv| p serv.addr #=> ["AF_UNIX", "/tmp/s"] } UNIXServer.open("/tmp/s") {|serv| c = UNIXSocket.open("/tmp/s") p c.peeraddr #=> ["AF_UNIX", "/tmp/s"] p c.addr #=> ["AF_UNIX", ""] }
[SEE_ALSO] UNIXSocket#peeraddr
path -> String
[permalink][rdoc]UNIX ソケットのパスを返します。
クライアント側はパスを持たないため空文字列となります。
例:
require 'socket' UNIXServer.open("/tmp/s") {|serv| p serv.path #=> "/tmp/s" }
peeraddr -> [String, String]
[permalink][rdoc]接続相手先ソケットの情報を表す配列を返します。配列の各要素は第1要素が文字列 "AF_UNIX"、第2要素がパスを表す文字列です。
例:
require 'socket' UNIXServer.open("/tmp/s") {|serv| c = UNIXSocket.open("/tmp/s") p c.peeraddr #=> ["AF_UNIX", "/tmp/s"] p c.addr #=> ["AF_UNIX", ""] }
[SEE_ALSO] UNIXSocket#addr
recv_io(klass=IO, mode=nil) -> Integer|IO|object
[permalink][rdoc]ソケットの接続先からファイルディスクリプタを受け取ります。
klass が nil の場合、ファイルディスクリプタが Integer として返されます。
klass が nil でない場合、 klass.for_fd(fd[, mode]) が呼ばれ、その値が返されます。
例:
require 'socket' s1, s2 = UNIXSocket.pair s1.send_io STDOUT io = s2.recv_io p File.identical?(io, STDOUT) #=> true
recvfrom(maxlen, flags = 0) -> [String [String, String]]
[permalink][rdoc]recvfrom(2) を用いてソケットからメッセージを受け取ります。
maxlen で受け取るメッセージの最大長をバイト数で指定します。
flags には Socket::MSG_* という名前の定数の bitwise OR を渡します。
戻り値は文字列と相手ソケットのパスのペアです。
例:
require 'socket' UNIXServer.open("/tmp/s") {|serv| c = UNIXSocket.open("/tmp/s") s = serv.accept s.send "a", 0 p c.recvfrom(10)[0] #=> "a" }
send_io(io) -> nil
[permalink][rdoc]引数 io に対応するファイルディスクリプタをソケットの接続先に送ります。
require 'socket' s1, s2 = UNIXSocket.pair s1.send_io STDOUT stdout = s2.recv_io p STDOUT.fileno #=> 1 p stdout.fileno #=> 6 stdout.puts "hello" # outputs "hello\n" to standard output.