summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2015-01-02 10:38:38 +0100
committerGiampaolo Rodola <g.rodola@gmail.com>2015-01-02 10:38:38 +0100
commitf54979e88addb3e9607ec2166f402382d8cb5088 (patch)
tree0ddaf522000b40acfb17082e9188d11db1304409
parent512579d5383107d2c51312f4bc4ee3390adb5cf3 (diff)
downloadpsutil-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.py1
-rw-r--r--psutil/_psosx.py1
-rw-r--r--psutil/_pssunos.py1
-rw-r--r--psutil/_psutil_posix.c5
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);