private boolean updateClient(Client c) {
    if (c.isClosed()) {
      listener.onClientClose(this, c, null);

      return false;
    }

    try {
      c.read();
      c.update();

      listener.onClientUpdate(this, c);

      if (c.isReadyToSend()) {
        c.send();
      }

      return true;
    } catch (Exception e) {
      listener.onClientClose(this, c, e);

      c.close();

      return false;
    }
  }