Time for action – detecting a disconnect

When a client terminates the connection, we have to delete the socket from the local m_clients list. Therefore, we have to connected the socket's disconnected() signal to:

void TcpServer::removeConnection()
{
  if (QTcpSocket *con = qobject_cast<QTcpSocket*>(sender())) {
    ui->log->insertPlainText(
      QString("* Connection removed: %1, port %2\n")
      .arg(con->peerAddress().toString())
      .arg(QString::number(con->peerPort())));
    m_clients.removeOne(con);
    con->deleteLater();
    ui->disconnectClients->setEnabled(!m_clients.isEmpty());
  }
}

What just happened?

After getting the socket that emitted the call through sender(), we post the information that a socket is being removed. Then, we remove the socket from m_clients and ...

Get Game Programming Using Qt now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.