tst_QUdpSocket: move up the search for IPv6-capable interfaces

Let's do it in initTestCase(), where we're already searching for IPv6
addresses, instead of storing the information in a local static.

Change-Id: Ifa1111900d6945ea8e05fffd177efb6a055aaa58
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit fd924ab0b648f6a7516a6940272115a7db736a25)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Thiago Macieira 2023-08-26 09:22:22 -07:00 committed by Qt Cherry-pick Bot
parent 10cc2d614c
commit d5e8ff75ce

View File

@ -121,6 +121,7 @@ private:
QList<QHostAddress> allAddresses;
QHostAddress multicastGroup4, multicastGroup6;
QList<QHostAddress> linklocalMulticastGroups;
QNetworkInterface ifaceWithIPv6;
QUdpSocket *m_asyncSender;
QUdpSocket *m_asyncReceiver;
};
@ -171,26 +172,7 @@ QNetworkInterface tst_QUdpSocket::interfaceForGroup(const QHostAddress &multicas
if (!scope.isEmpty())
return QNetworkInterface::interfaceFromName(scope);
static QNetworkInterface ipv6if = [&]() {
// find any link local address in the allAddress list
for (const QHostAddress &addr: std::as_const(allAddresses)) {
if (addr.isLoopback())
continue;
QString scope = addr.scopeId();
if (!scope.isEmpty()) {
QNetworkInterface iface = QNetworkInterface::interfaceFromName(scope);
qDebug() << "Will bind IPv6 sockets to" << iface;
return iface;
}
}
qWarning("interfaceForGroup(%s) could not find any link-local IPv6 address! "
"Make sure this test is behind a check of QtNetworkSettings::hasIPv6().",
qUtf8Printable(multicastGroup.toString()));
return QNetworkInterface();
}();
return ipv6if;
return ifaceWithIPv6;
}
bool tst_QUdpSocket::shouldWorkaroundLinuxKernelBug()
@ -275,9 +257,16 @@ void tst_QUdpSocket::initTestCase()
continue;
llbase.setScopeId(scope);
linklocalMulticastGroups << llbase;
if (!ifaceWithIPv6.isValid()) {
// Remember the first interface we've found that has IPv6 so we can
// bind non-link-local sockets to it (the first is least likely to
// be some weird virtual interface).
ifaceWithIPv6 = QNetworkInterface::interfaceFromName(scope);
}
}
qDebug() << "Will use multicast groups" << multicastGroup4 << multicastGroup6 << linklocalMulticastGroups;
qDebug() << "Will bind IPv6 sockets to" << ifaceWithIPv6;
m_workaroundLinuxKernelBug = shouldWorkaroundLinuxKernelBug();
if (QTestPrivate::isRunningArmOnX86())