Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > socketライブラリ > UNIXServerクラス
クラスの継承リスト: UNIXServer < UNIXSocket < BasicSocket < IO < Enumerable < File::Constants < Object < Kernel < BasicObject
UNIXストリーム型接続のサーバ側のソケットのクラス。
open(path) -> UNIXServer[permalink][rdoc]new(path) -> UNIXServeropen(path) {|sock| ...} -> objectnew(path) {|sock| ...} -> objectpath で指定したパス名を用いて接続を受け付けるソケット を作成します。
ブロックを省略すると作成したサーバソケットを返します。
ブロックを渡した場合は、作成したソケットを引数としてそのブロックを呼びだし、 ブロック終了時にソケットを閉じます。この場合には ブロックの評価値を返り値として返します。
require 'socket'
serv = UNIXServer.new("/tmp/sock")
s = serv.accept
p s.read
accept -> UnixSocket[permalink][rdoc]クライアントからの接続要求を accept(2)で待ち受け、接続した UNIXSocket のインスタンスを返します。
例:
require 'socket'
UNIXServer.open("/tmp/s") {|serv|
c = UNIXSocket.open("/tmp/s")
s = serv.accept
s.write "from server"
c.write "from client"
p c.recv(20) #=> "from server"
p s.recv(20) #=> "from client"
}
accept_nonblock -> UnixSocket[permalink][rdoc]ソケットをノンブロッキングモードに設定した後、 accept(2) を呼び出します。
接続した UNIXSocket のインスタンスを返します。
accept(2) がエラーになった場合、Socket#accept と同じ例外が 発生します。
Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO のいずれかの例外が 発生した場合は、その例外には IO::WaitReadable が extend されます。それを利用してリトライ可能な例外を掴まえることができます。
require 'socket'
serv = UNIXServer.new("/tmp/sock")
begin # emulate blocking accept
sock = serv.accept_nonblock
rescue IO::WaitReadable, Errno::EINTR
IO.select([serv])
retry
end
# sock is an accepted socket.
[SEE_ALSO] UNIXServer#accept
listen(backlog) -> 0[permalink][rdoc]listen(2) を実行します。 (Socket#listenと同じ)
backlog は、クライアントからの接続要求を保留できる数です。 UNIXServer のインスタンスは最初は backlog の値は 5 で生成されます。
listen(2) が成功すれば 0 を返します。 失敗すれば 例外 Errno::EXXX が発生します。
sysaccept -> Integer[permalink][rdoc]接続したクライアントのソケットをファイル記述子で返すことを除けば UNIXServer#accept と同じです。
例:
require 'socket'
UNIXServer.open("/tmp/s") {|serv|
c = UNIXSocket.open("/tmp/s")
p serv.sysaccept #=> 6
}