Module: IOTimeoutMixin
- Defined in:
- lib/tcp-client/mixin/io_timeout.rb
Class Method Summary collapse
Instance Method Summary collapse
- #read(nbytes, timeout: nil, exception: IOTimeoutError) ⇒ Object
- #write(*msgs, timeout: nil, exception: IOTimeoutError) ⇒ Object
Class Method Details
.included(mod) ⇒ Object
4 5 6 7 |
# File 'lib/tcp-client/mixin/io_timeout.rb', line 4 def self.included(mod) im = mod.instance_methods mod.include(im.index(:wait_writable) && im.index(:wait_readable) ? WithDeadlineMethods : WidthDeadlineIO) end |
Instance Method Details
#read(nbytes, timeout: nil, exception: IOTimeoutError) ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/tcp-client/mixin/io_timeout.rb', line 9 def read(nbytes, timeout: nil, exception: IOTimeoutError) timeout = timeout.to_f return read_all(nbytes){ |junk_size| super(junk_size) } if timeout <= 0 deadline = Time.now + timeout read_all(nbytes) do |junk_size| with_deadline(deadline, exception){ read_nonblock(junk_size, exception: false) } end end |
#write(*msgs, timeout: nil, exception: IOTimeoutError) ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/tcp-client/mixin/io_timeout.rb', line 18 def write(*msgs, timeout: nil, exception: IOTimeoutError) timeout = timeout.to_f return write_all(msgs.join){ |junk| super(junk) } if timeout <= 0 deadline = Time.now + timeout write_all(msgs.join) do |junk| with_deadline(deadline, exception){ write_nonblock(junk, exception: false) } end end |