Ensure socket is not prematurely destroyed when client disconnects (fixes #15).

This commit is contained in:
Nathan Osman
2017-08-08 12:01:39 -07:00
parent 255200ab15
commit 7e962c8ac4
4 changed files with 9 additions and 3 deletions

View File

@@ -345,6 +345,11 @@ Q_SIGNALS:
*/ */
void headersParsed(); void headersParsed();
/**
* @brief Indicate that the client has disconnected
*/
void disconnected();
protected: protected:
/** /**

View File

@@ -92,6 +92,9 @@ void FilesystemHandlerPrivate::processFile(Socket *socket, const QString &absolu
socket->close(); socket->close();
}); });
// Stop the copier if the socket is disconnected
connect(socket, &Socket::disconnected, copier, &QIODeviceCopier::stop);
qint64 fileSize = file->size(); qint64 fileSize = file->size();
// Checking for partial content request // Checking for partial content request

View File

@@ -50,9 +50,6 @@ void ServerPrivate::process(QTcpSocket *socket)
httpSocket->writeError(Socket::InternalServerError); httpSocket->writeError(Socket::InternalServerError);
} }
}); });
// Destroy the socket once the client is disconnected
connect(socket, &QTcpSocket::disconnected, httpSocket, &Socket::deleteLater);
} }
Server::Server(QObject *parent) Server::Server(QObject *parent)

View File

@@ -69,6 +69,7 @@ SocketPrivate::SocketPrivate(Socket *httpSocket, QTcpSocket *tcpSocket)
connect(socket, &QTcpSocket::readyRead, this, &SocketPrivate::onReadyRead); connect(socket, &QTcpSocket::readyRead, this, &SocketPrivate::onReadyRead);
connect(socket, &QTcpSocket::bytesWritten, this, &SocketPrivate::onBytesWritten); connect(socket, &QTcpSocket::bytesWritten, this, &SocketPrivate::onBytesWritten);
connect(socket, &QTcpSocket::readChannelFinished, q, &Socket::readChannelFinished); connect(socket, &QTcpSocket::readChannelFinished, q, &Socket::readChannelFinished);
connect(socket, &QTcpSocket::disconnected, q, &Socket::disconnected);
// Process anything already received by the socket // Process anything already received by the socket
onReadyRead(); onReadyRead();