diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp
index 770bae7bf35329090a9cb05791e32c54101560b2..41834b21ae55211825cfba8b9c14d4a8dbdd0db7 100644
--- a/src/network/socket/qnativesocketengine_win.cpp
+++ b/src/network/socket/qnativesocketengine_win.cpp
@@ -573,6 +573,19 @@ bool QNativeSocketEnginePrivate::fetchConnectionParameters()
             }
     }
 
+    // Some Windows kernels return a v4-mapped QHostAddress::AnyIPv4 as a
+    // local address of the socket which bound on both IPv4 and IPv6 interfaces.
+    // This address does not match to any special address and should not be used
+    // to send the data. So, replace it with QHostAddress::Any.
+    if (socketProtocol == QAbstractSocket::IPv6Protocol) {
+        bool ok = false;
+        const quint32 localIPv4 = localAddress.toIPv4Address(&ok);
+        if (ok && localIPv4 == INADDR_ANY) {
+            socketProtocol = QAbstractSocket::AnyIPProtocol;
+            localAddress = QHostAddress::Any;
+        }
+    }
+
     memset(&sa, 0, sizeof(sa));
     if (::getpeername(socketDescriptor, &sa.a, &sockAddrSize) == 0) {
         qt_socket_getPortAndAddress(socketDescriptor, &sa, &peerPort, &peerAddress);