diff options
-rw-r--r-- | src/network/access/qhttpnetworkconnection.cpp | 9 | ||||
-rw-r--r-- | src/network/access/qhttpnetworkconnection_p.h | 1 | ||||
-rw-r--r-- | src/network/access/qhttpnetworkconnectionchannel.cpp | 1 |
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))) { |