From 83f00b82298cf8fbba8baa7b983ff177f74a6642 Mon Sep 17 00:00:00 2001 From: Alex Trotsenko Date: Mon, 27 Jul 2020 19:21:37 +0300 Subject: [PATCH] QNativeSocketEngine/Win: fix write() in case of splitting When a first call to ::WSASend() consumes less data than requested, we are trying to make a second call, leaving 'bytesToSend' unmodified. Instead of setting a new value for 'bytesToSend', it seems reasonable to break the loop, if the system buffer overflow detected. Pick-to: 5.15 Change-Id: I8038e95c20221518955efe786f2d0dadb98360fa Reviewed-by: Thiago Macieira --- src/network/socket/qnativesocketengine_win.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index 70c96f0096..35422a1e80 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -1444,10 +1444,8 @@ qint64 QNativeSocketEnginePrivate::nativeWrite(const char *data, qint64 len) int err; if (socketRet != SOCKET_ERROR) { - if (ret == len) + if (ret == len || bytesToSend != qint64(bytesWritten)) break; - else - continue; } else if ((err = WSAGetLastError()) == WSAEWOULDBLOCK) { break; } else if (err == WSAENOBUFS) {