class HTTP::Timeout::Global

def perform_io

Perform the given I/O operation with the given argument
def perform_io
  reset_timer
  loop do
    begin
      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
  end
rescue EOFError
  :eof
end