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