diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2015-12-02 12:37:06 -0800 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2016-01-21 05:19:10 +0000 |
commit | 8cd67bbfac5783cd77f1e0617dc4c938dfd44229 (patch) | |
tree | 5877a73d52b40585438da12975251fb580d61b9d /src/network/kernel | |
parent | 043f5d3eb52587831f643bc52c95079c36d984c7 (diff) |
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 <rich@kde.org>
Diffstat (limited to 'src/network/kernel')
-rw-r--r-- | src/network/kernel/qnetworkinterface_unix.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp index b734476dc2..eb73a2fb18 100644 --- a/src/network/kernel/qnetworkinterface_unix.cpp +++ b/src/network/kernel/qnetworkinterface_unix.cpp @@ -268,29 +268,29 @@ static QList<QNetworkInterfacePrivate *> 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); |