diff --git a/src/network/kernel/qnetworkinterface_linux.cpp b/src/network/kernel/qnetworkinterface_linux.cpp index 89374d2c4c..a12a16d1f7 100644 --- a/src/network/kernel/qnetworkinterface_linux.cpp +++ b/src/network/kernel/qnetworkinterface_linux.cpp @@ -9,6 +9,7 @@ #include #include +#include #include // according to rtnetlink(7) @@ -85,28 +86,6 @@ static QNetworkInterface::InterfaceType probeIfType(int socket, struct ifreq *re namespace { -struct NetlinkSocket -{ - int sock; - Q_NODISCARD_CTOR explicit NetlinkSocket(int bufferSize) - { - sock = qt_safe_socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE); - if (Q_UNLIKELY(sock == -1)) - qErrnoWarning("Could not create AF_NETLINK socket"); - - // set buffer length - socklen_t len = sizeof(bufferSize); - setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufferSize, len); - } - - ~NetlinkSocket() - { - if (sock != -1) - qt_safe_close(sock); - } - - operator int() const { return sock; } -}; template struct ProcessNetlinkRequest { @@ -406,9 +385,17 @@ QList QNetworkInterfaceManager::scan() { // open netlink socket QList result; - NetlinkSocket sock(BufferSize); - if (Q_UNLIKELY(sock == -1)) + int sock = qt_safe_socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE); + if (sock == -1) { + qErrnoWarning("Could not create AF_NETLINK socket"); return result; + } + + const auto sg = qScopeGuard([&] { qt_safe_close(sock); }); + + // set buffer length + const int bufferSize = BufferSize; + setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize)); QByteArray buffer(BufferSize, Qt::Uninitialized); char *buf = buffer.data();