module IOWithDeadlineMixin
Public Class Methods
included(mod)
click to toggle source
# File lib/tcp-client/mixin/io_with_deadline.rb, line 4 def self.included(mod) methods = mod.instance_methods if methods.index(:wait_writable) && methods.index(:wait_readable) mod.include(ViaWaitMethod) else mod.include(ViaSelect) end end
Public Instance Methods
read_with_deadline(bytes_to_read, deadline, exception)
click to toggle source
# File lib/tcp-client/mixin/io_with_deadline.rb, line 13 def read_with_deadline(bytes_to_read, deadline, exception) raise(exception) unless deadline.remaining_time result = ''.b while result.bytesize < bytes_to_read read = with_deadline(deadline, exception) do read_nonblock(bytes_to_read - result.bytesize, exception: false) end next result += read if read close break end result end
write_with_deadline(data, deadline, exception)
click to toggle source
# File lib/tcp-client/mixin/io_with_deadline.rb, line 28 def write_with_deadline(data, deadline, exception) raise(exception) unless deadline.remaining_time return 0 if (size = data.bytesize).zero? result = 0 loop do written = with_deadline(deadline, exception) do write_nonblock(data, exception: false) end result += written return result if result >= size data = data.byteslice(written, data.bytesize - written) end end