UNIXストリーム型接続のサーバ側のソケットのクラス。
open(path) -> UNIXServer
[permalink][rdoc]new(path) -> UNIXServer
open(path) {|sock| ...} -> object
new(path) {|sock| ...} -> object
path で指定したパス名を用いて接続を受け付けるソケットを作成します。
ブロックを省略すると作成したサーバソケットを返します。
ブロックを渡した場合は、作成したソケットを引数としてそのブロックを呼びだし、ブロック終了時にソケットを閉じます。この場合にはブロックの評価値を返り値として返します。
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 は、クライアントからの接続要求を保留できる数です。
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 }