diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 5c9ebac283..84c814cca4 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -2644,6 +2644,20 @@ QByteArray QSslSocketPrivate::peek(qint64 maxSize) } } +/*! + \internal +*/ +qint64 QSslSocketPrivate::skip(qint64 maxSize) +{ + if (mode == QSslSocket::UnencryptedMode && !autoStartHandshake) + return plainSocket->skip(maxSize); + + // In encrypted mode, the SSL backend writes decrypted data directly into the + // QIODevice's read buffer. As this buffer is always emptied by the caller, + // we need to wait for more incoming data. + return (state == QAbstractSocket::ConnectedState) ? Q_INT64_C(0) : Q_INT64_C(-1); +} + /*! \internal */ diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index 9d45d01695..ced861805b 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -192,6 +192,7 @@ public: virtual qint64 peek(char *data, qint64 maxSize) override; virtual QByteArray peek(qint64 maxSize) override; + qint64 skip(qint64 maxSize) override; bool flush() override; // Platform specific functions