private void processReadySessions(Set<SelectionKey> handles) {
    Iterator<SelectionKey> iterator = handles.iterator();

    while (iterator.hasNext()) {
      SelectionKey key = iterator.next();
      DatagramChannel handle = (DatagramChannel) key.channel();
      iterator.remove();

      try {
        if ((key != null) && key.isValid() && key.isReadable()) {
          readHandle(handle);
        }

        if ((key != null) && key.isValid() && key.isWritable()) {
          for (IoSession session : getManagedSessions().values()) {
            scheduleFlush((NioSession) session);
          }
        }
      } catch (Exception e) {
        ExceptionMonitor.getInstance().exceptionCaught(e);
      }
    }
  }