class UNIXServer

[edit]

要約

UNIXストリーム型接続のサーバ側のソケットのクラス。

目次

特異メソッド
インスタンスメソッド

継承しているメソッド

UNIXSocketから継承しているメソッド
BasicSocketから継承しているメソッド
IOから継承しているメソッド
Enumerableから継承しているメソッド

特異メソッド

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

path で指定したパス名を用いて接続を受け付けるソケットを作成します。

ブロックを省略すると作成したサーバソケットを返します。

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

[PARAM] path:
接続を受け付けるパス名文字列
require 'socket'

serv = UNIXServer.new("/tmp/sock")
s = serv.accept
p s.read

インスタンスメソッド

accept -> UnixSocket[permalink][rdoc][edit]

クライアントからの接続要求を 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][edit]

ソケットをノンブロッキングモードに設定した後、 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][edit]

listen(2) を実行します。 (Socket#listenと同じ)

backlog は、クライアントからの接続要求を保留できる数です。

listen(2) が成功すれば 0 を返します。失敗すれば 例外 Errno::EXXX が発生します。

[PARAM] backlog:
バックログの最大数(接続要求を保留できる数)
sysaccept -> Integer[permalink][rdoc][edit]

接続したクライアントのソケットをファイル記述子で返すことを除けば UNIXServer#accept と同じです。

例:

require 'socket'

UNIXServer.open("/tmp/s") {|serv|
  c = UNIXSocket.open("/tmp/s")
  p serv.sysaccept        #=> 6
}