diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp index 69ebfdfceb3..bd9b4436020 100644 --- a/src/network/socket/qnativesocketengine_winrt.cpp +++ b/src/network/socket/qnativesocketengine_winrt.cpp @@ -643,7 +643,7 @@ qint64 QNativeSocketEngine::bytesAvailable() const if (d->socketType != QAbstractSocket::TcpSocket) return -1; - return d->readBytes.size() - d->readBytes.pos(); + return d->bytesAvailable; } qint64 QNativeSocketEngine::read(char *data, qint64 maxlen) @@ -661,7 +661,9 @@ qint64 QNativeSocketEngine::read(char *data, qint64 maxlen) } QMutexLocker mutexLocker(&d->readMutex); - return d->readBytes.read(data, maxlen); + qint64 b = d->readBytes.read(data, maxlen); + d->bytesAvailable = d->readBytes.size() - d->readBytes.pos(); + return b; } qint64 QNativeSocketEngine::write(const char *data, qint64 len) @@ -1456,6 +1458,7 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async Q_ASSERT(readBytes.atEnd()); readBytes.write(reinterpret_cast(data), qint64(bufferLength)); readBytes.seek(readPos); + bytesAvailable = readBytes.size() - readBytes.pos(); readMutex.unlock(); if (notifyOnRead) diff --git a/src/network/socket/qnativesocketengine_winrt_p.h b/src/network/socket/qnativesocketengine_winrt_p.h index 6bc77c1529f..605f3631b93 100644 --- a/src/network/socket/qnativesocketengine_winrt_p.h +++ b/src/network/socket/qnativesocketengine_winrt_p.h @@ -55,6 +55,7 @@ #include #include #include +#include #include "QtNetwork/qhostaddress.h" #include "private/qabstractsocketengine_p.h" #include @@ -217,6 +218,7 @@ private: QBuffer readBytes; QMutex readMutex; bool emitOnNewDatagram; + QAtomicInteger bytesAvailable; QList pendingDatagrams; QList pendingConnections;