要約
UNIXストリーム型接続のサーバ側のソケットのクラス。
目次
継承しているメソッド
- UNIXSocketから継承しているメソッド
- BasicSocketから継承しているメソッド
- IOから継承しているメソッド
-
- <<
- advise
- autoclose=
- autoclose?
- binmode
- binmode?
- bytes
- chars
- clone
- close
- close_on_exec=
- close_on_exec?
- close_read
- close_write
- closed?
- codepoints
- dup
- each
- each_byte
- each_char
- each_codepoint
- each_line
- eof
- eof?
- external_encoding
- fcntl
- fdatasync
- fileno
- flush
- fsync
- getbyte
- getc
- gets
- internal_encoding
- ioctl
- isatty
- lineno
- lineno=
- lines
- pid
- pos
- pos=
- pread
- printf
- putc
- puts
- pwrite
- read
- read_nonblock
- readbyte
- readchar
- readline
- readlines
- readpartial
- reopen
- rewind
- seek
- set_encoding
- stat
- sync
- sync=
- sysread
- sysseek
- syswrite
- tell
- to_i
- to_io
- tty?
- ungetbyte
- ungetc
- write
- write_nonblock
- Enumerableから継承しているメソッド
-
- all?
- any?
- chunk
- chunk_while
- collect
- collect_concat
- count
- cycle
- detect
- drop
- drop_while
- each_cons
- each_entry
- each_slice
- each_with_index
- each_with_object
- entries
- find
- find_all
- find_index
- first
- flat_map
- grep
- grep_v
- group_by
- include?
- inject
- lazy
- map
- max
- max_by
- member?
- min
- min_by
- minmax
- minmax_by
- none?
- one?
- partition
- reduce
- reject
- reverse_each
- select
- slice_after
- slice_before
- slice_when
- sort
- sort_by
- sum
- take
- take_while
- to_a
- to_h
- uniq
- zip
特異メソッド
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 }