diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2015-08-11 15:21:30 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2015-08-16 18:12:39 +0000 |
commit | 1bf9cb44e24ba2d795e3c242276d07acb0e46322 (patch) | |
tree | 595004a031ed80c604be1ac2b3b33fbfff6b51ee /src/network | |
parent | 3bfba054cb310d06543b08b5efb88de9b34a992e (diff) |
QNetworkInterface: prefer SIOCGIFINDEX over if_nametoindex
On Linux (on a bad system without getifaddrs), the ioctl for
SIOCGIFINDEX should be faster than if_nametoindex. The ioctl on the
already open socket will require one syscall, while if_nametoindex will
require at least one more (to open the socket), probably more.
Change-Id: I7de033f80b0e4431b7f1ffff13f9888bf2044105
Reviewed-by: Richard J. Moore <rich@kde.org>
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/kernel/qnetworkinterface_unix.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp index 04e1ce7edd..38cddd8f7a 100644 --- a/src/network/kernel/qnetworkinterface_unix.cpp +++ b/src/network/kernel/qnetworkinterface_unix.cpp @@ -185,9 +185,14 @@ static QNetworkInterfacePrivate *findInterface(int socket, QList<QNetworkInterfa QNetworkInterfacePrivate *iface = 0; int ifindex = 0; -#ifndef QT_NO_IPV6IFNAME +#if !defined(QT_NO_IPV6IFNAME) || defined(SIOCGIFINDEX) // Get the interface index +# ifdef SIOCGIFINDEX + if (qt_safe_ioctl(socket, SIOCGIFINDEX, &req) >= 0) + ifindex = req.ifr_ifindex; +# else ifindex = if_nametoindex(req.ifr_name); +# endif // find the interface data QList<QNetworkInterfacePrivate *>::Iterator if_it = interfaces.begin(); |