From 1a8627cf199e7435d02424f1959e090bae4e3409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Wed, 12 Aug 2020 19:00:54 +0200 Subject: [PATCH] QNAM: Don't close the connection due to not having a layer preference This seems to only be happening when we have a single channel because otherwise it will try IPv4 in one channel and IPv6 in the second. Change-Id: I0d513e25fefffeabfc733e895827aa12da335ef9 Reviewed-by: Timur Pocheptsov --- src/network/access/qhttpnetworkconnectionchannel.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index d305fae094..24720be7da 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -884,8 +884,11 @@ void QHttpNetworkConnectionChannel::_q_connected() } connection->d_func()->networkLayerDetected(networkLayerPreference); } else { - if (((connection->d_func()->networkLayerState == QHttpNetworkConnectionPrivate::IPv4) && (networkLayerPreference != QAbstractSocket::IPv4Protocol)) - || ((connection->d_func()->networkLayerState == QHttpNetworkConnectionPrivate::IPv6) && (networkLayerPreference != QAbstractSocket::IPv6Protocol))) { + bool anyProtocol = networkLayerPreference == QAbstractSocket::AnyIPProtocol; + if (((connection->d_func()->networkLayerState == QHttpNetworkConnectionPrivate::IPv4) + && (networkLayerPreference != QAbstractSocket::IPv4Protocol && !anyProtocol)) + || ((connection->d_func()->networkLayerState == QHttpNetworkConnectionPrivate::IPv6) + && (networkLayerPreference != QAbstractSocket::IPv6Protocol && !anyProtocol))) { close(); // This is the second connection so it has to be closed and we can schedule it for another request. QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);