summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2023-04-16 01:48:10 +0200
committerGiampaolo Rodola <g.rodola@gmail.com>2023-04-16 01:48:10 +0200
commitb1c1a005e5919291abc2edb5e6611806bce3346b (patch)
treea872a0b201fc93f042e8a3774c6b2c863b02c6d6
parent19461905377ce3060b60df1949c082086492dab9 (diff)
downloadpsutil-b1c1a005e5919291abc2edb5e6611806bce3346b.tar.gz
BSD: refactor py code related to filtering connections
-rw-r--r--psutil/_psbsd.py60
1 files changed, 18 insertions, 42 deletions
diff --git a/psutil/_psbsd.py b/psutil/_psbsd.py
index 9dd8420d..8fc256b2 100644
--- a/psutil/_psbsd.py
+++ b/psutil/_psbsd.py
@@ -423,25 +423,20 @@ def net_connections(kind):
if OPENBSD:
rawlist = cext.net_connections(-1, families, types)
- ret = set()
- for item in rawlist:
- fd, fam, type, laddr, raddr, status, pid = item
- if fam in families and type in types:
- nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
- TCP_STATUSES, pid)
- ret.add(nt)
- return list(ret)
elif NETBSD:
rawlist = cext.net_connections(-1)
- else:
+ else: # FreeBSD
rawlist = cext.net_connections()
+
for item in rawlist:
fd, fam, type, laddr, raddr, status, pid = item
- # TODO: apply filter at C level
- if fam in families and type in types:
- nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
- TCP_STATUSES, pid)
- ret.add(nt)
+ if NETBSD or FREEBSD:
+ # OpenBSD implements filtering in C
+ if (fam not in families) or (type not in types):
+ continue
+ nt = conn_to_ntuple(fd, fam, type, laddr, raddr,
+ status, TCP_STATUSES, pid)
+ ret.add(nt)
return list(ret)
@@ -785,45 +780,26 @@ class Process(object):
raise ValueError("invalid %r kind argument; choose between %s"
% (kind, ', '.join([repr(x) for x in conn_tmap])))
families, types = conn_tmap[kind]
+ ret = []
if NETBSD:
- ret = []
rawlist = cext.net_connections(self.pid)
- for item in rawlist:
- fd, fam, type, laddr, raddr, status, pid = item
- assert pid == self.pid
- if fam in families and type in types:
- nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
- TCP_STATUSES)
- ret.append(nt)
- self._assert_alive()
- return ret
-
elif OPENBSD:
- ret = []
rawlist = cext.net_connections(self.pid, families, types)
- for item in rawlist:
- fd, fam, type, laddr, raddr, status, pid = item
- assert pid == self.pid
- if fam in families and type in types:
- nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
- TCP_STATUSES)
- ret.append(nt)
- self._assert_alive()
- return ret
+ else: # FreeBSD
+ rawlist = cext.proc_connections(self.pid, families, types)
- # FreeBSD
- rawlist = cext.proc_connections(self.pid, families, types)
- ret = []
for item in rawlist:
- fd, fam, type, laddr, raddr, status = item
+ fd, fam, type, laddr, raddr, status = item[:6]
+ if NETBSD:
+ # FreeBSD and OpenBSD implement filtering in C
+ if (fam not in families) or (type not in types):
+ continue
nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
TCP_STATUSES)
ret.append(nt)
- if OPENBSD:
- self._assert_alive()
-
+ self._assert_alive()
return ret
@wrap_exceptions