module IOWithDeadlineMixin::ViaSelect
Private Instance Methods
with_deadline(deadline, exception) { || ... }
click to toggle source
# File lib/tcp-client/mixin/io_with_deadline.rb, line 63 def with_deadline(deadline, exception) loop do case ret = yield when :wait_writable remaining_time = deadline.remaining_time or raise(exception) raise(exception) if ::IO.select(nil, [self], nil, remaining_time).nil? when :wait_readable remaining_time = deadline.remaining_time or raise(exception) raise(exception) if ::IO.select([self], nil, nil, remaining_time).nil? else return ret end end rescue Errno::ETIMEDOUT raise(exception) end