class HTTP::Timeout::Global

def perform_io

Perform the given I/O operation with the given argument
def perform_io
  reset_timer
  loop do
    result = yield
    case result
    when :wait_readable then wait_readable_or_timeout
    when :wait_writable then wait_writable_or_timeout
    when NilClass       then return :eof
    else                return result
    end
  rescue IO::WaitReadable
    wait_readable_or_timeout
  rescue IO::WaitWritable
    wait_writable_or_timeout
  end
rescue EOFError
  :eof
end