diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 21f1f742f7c..cf6a7672fb8 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -479,10 +479,6 @@ #include #include -#ifndef QT_NO_SSL -#include -#endif - #include #ifdef QABSTRACTSOCKET_DEBUG @@ -2406,13 +2402,6 @@ void QAbstractSocket::abort() qDebug("QAbstractSocket::abort()"); #endif d->setWriteChannelCount(0); -#ifndef QT_NO_SSL - if (QSslSocket *socket = qobject_cast(this)) { - socket->abort(); - return; - } -#endif - d->abortCalled = true; close(); } diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 19ab903d364..9d8fa035e23 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -899,13 +899,19 @@ void QSslSocket::close() #endif Q_D(QSslSocket); - // We don't want any CA roots fetched anymore. + // On Windows, CertGetCertificateChain is probably still doing its + // job, if the socket is re-used, we want to ignore its reported + // root CA. d->caToFetch = QSslCertificate{}; - if (encryptedBytesToWrite() || !d->writeBuffer.isEmpty()) + if (!d->abortCalled && (encryptedBytesToWrite() || !d->writeBuffer.isEmpty())) flush(); - if (d->plainSocket) - d->plainSocket->close(); + if (d->plainSocket) { + if (d->abortCalled) + d->plainSocket->abort(); + else + d->plainSocket->close(); + } QTcpSocket::close(); // must be cleared, reading/writing not possible on closed socket: @@ -938,29 +944,6 @@ void QSslSocket::setReadBufferSize(qint64 size) d->plainSocket->setReadBufferSize(size); } -/*! - Aborts the current connection and resets the socket. Unlike - disconnectFromHost(), this function immediately closes the socket, - clearing any pending data in the write buffer. - - \sa disconnectFromHost(), close() -*/ -void QSslSocket::abort() -{ - Q_D(QSslSocket); -#ifdef QSSLSOCKET_DEBUG - qCDebug(lcSsl) << "QSslSocket::abort()"; -#endif - // On Windows, CertGetCertificateChain is probably still doing its - // job, if the socket is re-used, we want to ignore its reported - // root CA. - d->caToFetch = QSslCertificate{}; - - if (d->plainSocket) - d->plainSocket->abort(); - close(); -} - /*! \since 4.4 @@ -1883,6 +1866,7 @@ void QSslSocketPrivate::init() connectionEncrypted = false; ignoreAllSslErrors = false; shutdown = false; + abortCalled = false; pendingClose = false; flushTriggered = false; ocspResponses.clear(); diff --git a/src/network/ssl/qsslsocket.h b/src/network/ssl/qsslsocket.h index 4a576b17845..a808efbfdf3 100644 --- a/src/network/ssl/qsslsocket.h +++ b/src/network/ssl/qsslsocket.h @@ -117,7 +117,6 @@ public: bool canReadLine() const override; void close() override; bool atEnd() const override; - void abort(); // From QAbstractSocket: void setReadBufferSize(qint64 size) override;