Ruby 2.2.0 リファレンスマニュアル > ライブラリ一覧 > socketライブラリ > UNIXSocketクラス

class UNIXSocket

クラスの継承リスト: UNIXSocket < BasicSocket < IO < Enumerable < File::Constants < Object < Kernel < BasicObject

要約

UNIX ドメインのストリーム型ソケットのクラス。

通常の IO クラスのサブクラスと同様の入出力ができます。

目次

特異メソッド
new open pair socketpair
インスタンスメソッド
addr path peeraddr recv_io recvfrom send_io

特異メソッド

open(path) -> UNIXSocket[permalink][rdoc]
new(path) -> UNIXSocket
open(path) {|sock| ...} -> object
new(path) {|sock| ...} -> object

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

ブロックを省略すると接続したソケットを返します。

ブロックを渡した場合は、接続したソケットを引数としてそのブロックを呼びだし、 ブロック終了時にソケットを閉じます。この場合には ブロックの評価値を返り値として返します。

[PARAM] 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"
[PARAM] type:
ソケットタイプ
[PARAM] protocol:
プトロコル

インスタンスメソッド

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
[PARAM] klass:
受け取ったファイルディスクリプタを変換するためのクラス
[PARAM] mode:
for_fd に渡すファイルモード
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"
}
[PARAM] maxlen:
受け取るメッセージの最大長
[PARAM] flags:
フラグ
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.
[PARAM] io:
送るファイルディスクリプタ(整数 or IOオブジェクト)