diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-12 01:01:25 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-12 01:01:25 +0200 |
commit | 721a0e807881e4d00e752e3c3cf62427eb681dd2 (patch) | |
tree | 091100b37905e10fc3905d3e1665e1e849d59d72 /src/network | |
parent | 50d41f14eecc32e374ca34f76d45d65684a640c8 (diff) | |
parent | 8aa3329a7186b087163f68ef880c8ffdd47d01bf (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: I6ad865b2c26003f4508da9b3f8e075a951ff8ef7
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/socket/qnativesocketengine_win.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index 9edabd7822..dd115c33dc 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -53,6 +53,8 @@ #include <qnetworkinterface.h> #include <qoperatingsystemversion.h> +#include <algorithm> + //#define QNATIVESOCKETENGINE_DEBUG #if defined(QNATIVESOCKETENGINE_DEBUG) # include <qstring.h> @@ -1141,13 +1143,14 @@ qint64 QNativeSocketEnginePrivate::nativePendingDatagramSize() const qint64 ret = -1; int recvResult = 0; DWORD flags; - // We start at 1500 bytes (the MTU for Ethernet V2), which should catch - // almost all uses (effective MTU for UDP under IPv4 is 1468), except - // for localhost datagrams and those reassembled by the IP layer. - char udpMessagePeekBuffer[1500]; - std::vector<WSABUF> buf; + // We increase the amount we peek by 2048 * 5 on each iteration + // Grabs most cases fast and early. + char udpMessagePeekBuffer[2048]; + const int increments = 5; + QVarLengthArray<WSABUF, 10> buf; for (;;) { - buf.resize(buf.size() + 5, {sizeof(udpMessagePeekBuffer), udpMessagePeekBuffer}); + buf.reserve(buf.size() + increments); + std::fill_n(std::back_inserter(buf), increments, WSABUF{sizeof(udpMessagePeekBuffer), udpMessagePeekBuffer}); flags = MSG_PEEK; DWORD bytesRead = 0; |