From 8cd67bbfac5783cd77f1e0617dc4c938dfd44229 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 2 Dec 2015 12:37:06 -0800 Subject: [PATCH] QNetworkInterface: don't add a QNetworkAddressEntry if no IP is known If SIOCGIFADDR fails, then don't bother trying to get the broadcast address or netmask, and especially don't add the empty QNetworkAddressEntry to the interface. This can happen on interfaces that have no IP address assigned (for example, inactive interfaces). Change-Id: I8de47ed6c7be4847b99bffff141c326d94ecca78 Reviewed-by: Richard J. Moore --- src/network/kernel/qnetworkinterface_unix.cpp | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp index b734476dc2d..eb73a2fb180 100644 --- a/src/network/kernel/qnetworkinterface_unix.cpp +++ b/src/network/kernel/qnetworkinterface_unix.cpp @@ -268,29 +268,29 @@ static QList interfaceListing() } #endif - // Get the interface broadcast address - QNetworkAddressEntry entry; - if (iface->flags & QNetworkInterface::CanBroadcast) { - if (qt_safe_ioctl(socket, SIOCGIFBRDADDR, &req) >= 0) { - sockaddr *sa = &req.ifr_addr; - if (sa->sa_family == AF_INET) - entry.setBroadcast(addressFromSockaddr(sa)); - } - } - // Get the address of the interface + QNetworkAddressEntry entry; if (qt_safe_ioctl(socket, SIOCGIFADDR, &req) >= 0) { sockaddr *sa = &req.ifr_addr; entry.setIp(addressFromSockaddr(sa)); - } - // Get the interface netmask - if (qt_safe_ioctl(socket, SIOCGIFNETMASK, &req) >= 0) { - sockaddr *sa = &req.ifr_addr; - entry.setNetmask(addressFromSockaddr(sa)); - } + // Get the interface broadcast address + if (iface->flags & QNetworkInterface::CanBroadcast) { + if (qt_safe_ioctl(socket, SIOCGIFBRDADDR, &req) >= 0) { + sockaddr *sa = &req.ifr_addr; + if (sa->sa_family == AF_INET) + entry.setBroadcast(addressFromSockaddr(sa)); + } + } - iface->addressEntries << entry; + // Get the interface netmask + if (qt_safe_ioctl(socket, SIOCGIFNETMASK, &req) >= 0) { + sockaddr *sa = &req.ifr_addr; + entry.setNetmask(addressFromSockaddr(sa)); + } + + iface->addressEntries << entry; + } } ::close(socket);