diff --git a/src/include/qhttpengine/socket.h b/src/include/qhttpengine/socket.h index 1f34dfa..e49c05c 100644 --- a/src/include/qhttpengine/socket.h +++ b/src/include/qhttpengine/socket.h @@ -345,6 +345,11 @@ Q_SIGNALS: */ void headersParsed(); + /** + * @brief Indicate that the client has disconnected + */ + void disconnected(); + protected: /** diff --git a/src/src/filesystemhandler.cpp b/src/src/filesystemhandler.cpp index 296d6de..5f257ee 100644 --- a/src/src/filesystemhandler.cpp +++ b/src/src/filesystemhandler.cpp @@ -92,6 +92,9 @@ void FilesystemHandlerPrivate::processFile(Socket *socket, const QString &absolu socket->close(); }); + // Stop the copier if the socket is disconnected + connect(socket, &Socket::disconnected, copier, &QIODeviceCopier::stop); + qint64 fileSize = file->size(); // Checking for partial content request diff --git a/src/src/server.cpp b/src/src/server.cpp index 5d4e0ed..e27593e 100644 --- a/src/src/server.cpp +++ b/src/src/server.cpp @@ -50,9 +50,6 @@ void ServerPrivate::process(QTcpSocket *socket) httpSocket->writeError(Socket::InternalServerError); } }); - - // Destroy the socket once the client is disconnected - connect(socket, &QTcpSocket::disconnected, httpSocket, &Socket::deleteLater); } Server::Server(QObject *parent) diff --git a/src/src/socket.cpp b/src/src/socket.cpp index 290c8ee..83c8720 100644 --- a/src/src/socket.cpp +++ b/src/src/socket.cpp @@ -69,6 +69,7 @@ SocketPrivate::SocketPrivate(Socket *httpSocket, QTcpSocket *tcpSocket) connect(socket, &QTcpSocket::readyRead, this, &SocketPrivate::onReadyRead); connect(socket, &QTcpSocket::bytesWritten, this, &SocketPrivate::onBytesWritten); connect(socket, &QTcpSocket::readChannelFinished, q, &Socket::readChannelFinished); + connect(socket, &QTcpSocket::disconnected, q, &Socket::disconnected); // Process anything already received by the socket onReadyRead();