class Net::SSH::Connection::EventLoop

def ev_select_and_postprocess(wait)

def ev_select_and_postprocess(wait)
  owners = {}
  r = []
  w = []
  minwait = nil
  @sessions.each do |session|
    sr, sw, actwait = session.ev_do_calculate_rw_wait(wait)
    minwait = actwait if actwait && (minwait.nil? || actwait < minwait)
    r.push(*sr)
    w.push(*sw)
    sr.each { |ri| owners[ri] = session }
    sw.each { |wi| owners[wi] = session }
  end
  readers, writers, = IO.select(r, w, nil, minwait)
  fired_sessions = {}
  if readers
    readers.each do |reader|
      session = owners[reader]
      (fired_sessions[session] ||= { r: [], w: [] })[:r] << reader
    end
  end
  if writers
    writers.each do |writer|
      session = owners[writer]
      (fired_sessions[session] ||= { r: [], w: [] })[:w] << writer
    end
  end
  fired_sessions.each do |s, rw|
    s.ev_do_handle_events(rw[:r], rw[:w])
  end
  @sessions.each { |s| s.ev_do_postprocess(fired_sessions.key?(s)) }
  true
end