diff --git a/src/websockets/qwebsocketserver_p.cpp b/src/websockets/qwebsocketserver_p.cpp
index 91bfafcd34adc0b41c5a945d6cdb80a6c490b85b..3bf6d680f9066d53680f3aaa36426d3a857646a3 100644
--- a/src/websockets/qwebsocketserver_p.cpp
+++ b/src/websockets/qwebsocketserver_p.cpp
@@ -392,18 +392,20 @@ void QWebSocketServerPrivate::onNewConnection()
         QObjectPrivate::connect(pTcpSocket, &QTcpSocket::readyRead,
                                 this, &QWebSocketServerPrivate::handshakeReceived,
                                 Qt::QueuedConnection);
+        QObjectPrivate::connect(pTcpSocket, &QTcpSocket::disconnected,
+                                this, &QWebSocketServerPrivate::onSocketDisconnected);
     }
 }
 
 /*!
     \internal
  */
-void QWebSocketServerPrivate::onCloseConnection()
+void QWebSocketServerPrivate::onSocketDisconnected()
 {
     if (Q_LIKELY(currentSender)) {
         QTcpSocket *pTcpSocket = qobject_cast<QTcpSocket*>(currentSender->sender);
         if (Q_LIKELY(pTcpSocket))
-            pTcpSocket->close();
+            pTcpSocket->deleteLater();
     }
 }
 
diff --git a/src/websockets/qwebsocketserver_p.h b/src/websockets/qwebsocketserver_p.h
index 46a21566ccbbfd56e7ea09295eac9716d7fdf4f6..6aabebdfdf6cfc521a3a8a671d78660949e8a1f6 100644
--- a/src/websockets/qwebsocketserver_p.h
+++ b/src/websockets/qwebsocketserver_p.h
@@ -136,7 +136,7 @@ private:
                                  const QString &errorDescription);
 
     void onNewConnection();
-    void onCloseConnection();
+    void onSocketDisconnected();
     void handshakeReceived();
 };