From 7a3653887cc6e551bb9fc645fb32c3b682479f42 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 9 Jul 2013 00:12:58 -0700 Subject: Remove unused socket from QNetworkInterface Unix code This must be a relic from old code, before I split out the code that uses getifaddrs from the code that doesn't. Change-Id: Ia1265da6921c7c7a3dc97315d98fed50b3d2fe1c Reviewed-by: Richard J. Moore Reviewed-by: Peter Hartmann Reviewed-by: Jonas Gastal --- src/network/kernel/qnetworkinterface_unix.cpp | 6 ------ 1 file changed, 6 deletions(-) (limited to 'src/network/kernel') diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp index 0ec9554c82..80cc5db700 100644 --- a/src/network/kernel/qnetworkinterface_unix.cpp +++ b/src/network/kernel/qnetworkinterface_unix.cpp @@ -410,14 +410,9 @@ static QList interfaceListing() { QList interfaces; - int socket; - if ((socket = qt_safe_socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) == -1) - return interfaces; // error - ifaddrs *interfaceListing; if (getifaddrs(&interfaceListing) == -1) { // error - ::close(socket); return interfaces; } @@ -452,7 +447,6 @@ static QList interfaceListing() } freeifaddrs(interfaceListing); - ::close(socket); return interfaces; } #endif -- cgit v1.2.3 From dae087b30f4b88b24ffb233624f1b3f44285a123 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 13 Jul 2013 12:02:57 +0200 Subject: Avoid one extra if_indextoname per address in QNetworkInterface Given an IPv6 address associated with a network interface, there's a fairly high chance (of 100%) that any scope ID found is that of the interface. Change-Id: Id7315473f39b68ee4c169207168dc2e60fd7d570 Reviewed-by: Richard J. Moore Reviewed-by: Peter Hartmann Reviewed-by: Jonas Gastal --- src/network/kernel/qnetworkinterface_unix.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/network/kernel') diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp index 80cc5db700..b090213861 100644 --- a/src/network/kernel/qnetworkinterface_unix.cpp +++ b/src/network/kernel/qnetworkinterface_unix.cpp @@ -81,7 +81,7 @@ QT_BEGIN_NAMESPACE -static QHostAddress addressFromSockaddr(sockaddr *sa) +static QHostAddress addressFromSockaddr(sockaddr *sa, int ifindex = 0, const QString &ifname = QString()) { QHostAddress address; if (!sa) @@ -92,7 +92,11 @@ static QHostAddress addressFromSockaddr(sockaddr *sa) else if (sa->sa_family == AF_INET6) { address.setAddress(((sockaddr_in6 *)sa)->sin6_addr.s6_addr); int scope = ((sockaddr_in6 *)sa)->sin6_scope_id; - if (scope) { + if (scope && scope == ifindex) { + // this is the most likely scenario: + // a scope ID in a socket is that of the interface this address came from + address.setScopeId(ifname); + } else if (scope) { #ifndef QT_NO_IPV6IFNAME char scopeid[IFNAMSIZ]; if (::if_indextoname(scope, scopeid)) { @@ -434,14 +438,14 @@ static QList interfaceListing() } QNetworkAddressEntry entry; - entry.setIp(addressFromSockaddr(ptr->ifa_addr)); + entry.setIp(addressFromSockaddr(ptr->ifa_addr, iface->index, iface->name)); if (entry.ip().isNull()) // could not parse the address continue; - entry.setNetmask(addressFromSockaddr(ptr->ifa_netmask)); + entry.setNetmask(addressFromSockaddr(ptr->ifa_netmask, iface->index, iface->name)); if (iface->flags & QNetworkInterface::CanBroadcast) - entry.setBroadcast(addressFromSockaddr(ptr->ifa_broadaddr)); + entry.setBroadcast(addressFromSockaddr(ptr->ifa_broadaddr, iface->index, iface->name)); iface->addressEntries << entry; } -- cgit v1.2.3