summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp9
-rw-r--r--src/network/access/qhttpnetworkconnection_p.h1
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp1
3 files changed, 11 insertions, 0 deletions
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 21802e4e69..6e56aa6126 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -1094,6 +1094,15 @@ void QHttpNetworkConnectionPrivate::startNetworkLayerStateLookup()
}
}
+void QHttpNetworkConnectionPrivate::networkLayerDetected(QAbstractSocket::NetworkLayerProtocol protocol)
+{
+ for (int i = 0 ; i < channelCount; ++i) {
+ if ((channels[i].networkLayerPreference != protocol) && (channels[i].state == QHttpNetworkConnectionChannel::ConnectingState)) {
+ channels[i].close();
+ }
+ }
+}
+
void QHttpNetworkConnectionPrivate::_q_connectDelayedChannel()
{
if (delayIpv4)
diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h
index 1b9c703262..74bf25ae32 100644
--- a/src/network/access/qhttpnetworkconnection_p.h
+++ b/src/network/access/qhttpnetworkconnection_p.h
@@ -193,6 +193,7 @@ public:
void startHostInfoLookup();
void startNetworkLayerStateLookup();
+ void networkLayerDetected(QAbstractSocket::NetworkLayerProtocol protocol);
// private slots
void _q_startNextRequest(); // send the next request from the queue
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 006f533a69..2971854060 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -1039,6 +1039,7 @@ void QHttpNetworkConnectionChannel::_q_connected()
else
connection->d_func()->networkLayerState = QHttpNetworkConnectionPrivate::IPv6;
}
+ 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))) {