class HTTP::Timeout::Global
def perform_io
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