diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2015-01-02 10:38:38 +0100 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2015-01-02 10:38:38 +0100 |
commit | f54979e88addb3e9607ec2166f402382d8cb5088 (patch) | |
tree | 0ddaf522000b40acfb17082e9188d11db1304409 | |
parent | 512579d5383107d2c51312f4bc4ee3390adb5cf3 (diff) | |
download | psutil-f54979e88addb3e9607ec2166f402382d8cb5088.tar.gz |
#376: make net_if_addr() work on all other UNIX variants; also skip primary addresses which cannot be termined
-rw-r--r-- | psutil/_psbsd.py | 1 | ||||
-rw-r--r-- | psutil/_psosx.py | 1 | ||||
-rw-r--r-- | psutil/_pssunos.py | 1 | ||||
-rw-r--r-- | psutil/_psutil_posix.c | 5 |
4 files changed, 8 insertions, 0 deletions
diff --git a/psutil/_psbsd.py b/psutil/_psbsd.py index 87ae2119..62b4d873 100644 --- a/psutil/_psbsd.py +++ b/psutil/_psbsd.py @@ -201,6 +201,7 @@ pid_exists = _psposix.pid_exists disk_usage = _psposix.disk_usage net_io_counters = cext.net_io_counters disk_io_counters = cext.disk_io_counters +net_if_addrs = _psutil_posix.net_if_addrs def wrap_exceptions(fun): diff --git a/psutil/_psosx.py b/psutil/_psosx.py index c40ef1d7..4c146c24 100644 --- a/psutil/_psosx.py +++ b/psutil/_psosx.py @@ -170,6 +170,7 @@ pid_exists = _psposix.pid_exists disk_usage = _psposix.disk_usage net_io_counters = cext.net_io_counters disk_io_counters = cext.disk_io_counters +net_if_addrs = _psutil_posix.net_if_addrs def wrap_exceptions(fun): diff --git a/psutil/_pssunos.py b/psutil/_pssunos.py index 7b5385ef..47b97d25 100644 --- a/psutil/_pssunos.py +++ b/psutil/_pssunos.py @@ -72,6 +72,7 @@ TimeoutExpired = None disk_io_counters = cext.disk_io_counters net_io_counters = cext.net_io_counters disk_usage = _psposix.disk_usage +net_if_addrs = _psutil_posix.net_if_addrs def virtual_memory(): diff --git a/psutil/_psutil_posix.c b/psutil/_psutil_posix.c index a7b18405..2f96c1b7 100644 --- a/psutil/_psutil_posix.c +++ b/psutil/_psutil_posix.c @@ -161,6 +161,7 @@ psutil_net_if_addrs(PyObject* self, PyObject* args) PyObject *py_netmask = NULL; PyObject *py_broadcast = NULL; + if (getifaddrs(&ifaddr) == -1) { PyErr_SetFromErrno(PyExc_OSError); goto error; @@ -171,6 +172,10 @@ psutil_net_if_addrs(PyObject* self, PyObject* args) continue; family = ifa->ifa_addr->sa_family; py_address = psutil_convert_ipaddr(ifa->ifa_addr, family); + // If the primary address can't be determined just skip it. + // I've never seen this happen on Linux but I did on FreeBSD. + if (py_address == Py_None) + continue; if (py_address == NULL) goto error; py_netmask = psutil_convert_ipaddr(ifa->ifa_netmask, family); |