Module: Celluloid::IO

Defined in:
lib/celluloid/io.rb,
lib/celluloid/io/socket.rb,
lib/celluloid/io/stream.rb,
lib/celluloid/io/mailbox.rb,
lib/celluloid/io/reactor.rb,
lib/celluloid/io/version.rb,
lib/celluloid/io/ssl_server.rb,
lib/celluloid/io/ssl_socket.rb,
lib/celluloid/io/tcp_server.rb,
lib/celluloid/io/tcp_socket.rb,
lib/celluloid/io/udp_socket.rb,
lib/celluloid/io/unix_server.rb,
lib/celluloid/io/unix_socket.rb,
lib/celluloid/io/dns_resolver.rb

Overview

Actors with evented IO support

Defined Under Namespace

Classes: DNSResolver, Mailbox, Reactor, SSLServer, SSLSocket, Socket, Stream, TCPServer, TCPSocket, UDPSocket, UNIXServer, UNIXSocket

Constant Summary collapse

BLOCK_SIZE =

Default size to read from or write to the stream for buffer operations

1024 * 16
VERSION =
"0.17.3"

Class Method Summary collapse

Class Method Details

.copy_stream(src, dst, copy_length = nil, src_offset = nil) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/celluloid/io.rb', line 39

def self.copy_stream(src, dst, copy_length = nil, src_offset = nil)
  fail NotImplementedError, "length/offset not supported" if copy_length || src_offset

  src, dst = try_convert(src), try_convert(dst)

  # FIXME: this always goes through the reactor, and can block on file I/O
  while data = src.read(BLOCK_SIZE)
    dst << data
  end
end

.evented?Boolean

Returns:

  • (Boolean)


30
31
32
33
# File 'lib/celluloid/io.rb', line 30

def self.evented?
  actor = Thread.current[:celluloid_actor]
  actor && actor.mailbox.is_a?(Celluloid::IO::Mailbox)
end

.included(klass) ⇒ Object



25
26
27
28
# File 'lib/celluloid/io.rb', line 25

def self.included(klass)
  klass.send :include, Celluloid
  klass.mailbox_class Celluloid::IO::Mailbox
end

.try_convert(src) ⇒ Object



35
36
37
# File 'lib/celluloid/io.rb', line 35

def self.try_convert(src)
  ::IO.try_convert(src)
end

.wait_readable(io) ⇒ Object



50
51
52
53
54
55
56
57
58
59
# File 'lib/celluloid/io.rb', line 50

def wait_readable(io)
  io = io.to_io
  if IO.evented?
    mailbox = Thread.current[:celluloid_mailbox]
    mailbox.reactor.wait_readable(io)
  else
    Kernel.select([io])
  end
  nil
end

.wait_writable(io) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/celluloid/io.rb', line 62

def wait_writable(io)
  io = io.to_io
  if IO.evented?
    mailbox = Thread.current[:celluloid_mailbox]
    mailbox.reactor.wait_writable(io)
  else
    Kernel.select([], [io])
  end
  nil
end