diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2023-04-13 15:14:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-13 15:14:30 +0200 |
commit | aa2946513b85161f732963d1b7e30d0fe7d00d79 (patch) | |
tree | a47ff69a5e2e7fe8fc1eb5fe4a979f727a800e2c /psutil/_psbsd.py | |
parent | 0dde184075f81a9b6e22caa7255396d21ae63769 (diff) | |
download | psutil-aa2946513b85161f732963d1b7e30d0fe7d00d79.tar.gz |
OpenBSD: rewrite net_connections() from scratch (#2230)
Diffstat (limited to 'psutil/_psbsd.py')
-rw-r--r-- | psutil/_psbsd.py | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/psutil/_psbsd.py b/psutil/_psbsd.py index a0f07ee2..1180a94e 100644 --- a/psutil/_psbsd.py +++ b/psutil/_psbsd.py @@ -401,26 +401,23 @@ def net_if_stats(): def net_connections(kind): """System-wide network connections.""" - if OPENBSD: - ret = [] - for pid in pids(): - try: - cons = Process(pid).connections(kind) - except (NoSuchProcess, ZombieProcess): - continue - else: - for conn in cons: - conn = list(conn) - conn.append(pid) - ret.append(_common.sconn(*conn)) - return ret - if kind not in _common.conn_tmap: raise ValueError("invalid %r kind argument; choose between %s" % (kind, ', '.join([repr(x) for x in conn_tmap]))) families, types = conn_tmap[kind] ret = set() - if NETBSD: + + 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: rawlist = cext.net_connections() @@ -773,9 +770,9 @@ class Process(object): if kind not in conn_tmap: raise ValueError("invalid %r kind argument; choose between %s" % (kind, ', '.join([repr(x) for x in conn_tmap]))) + families, types = conn_tmap[kind] if NETBSD: - families, types = conn_tmap[kind] ret = [] rawlist = cext.net_connections(self.pid) for item in rawlist: @@ -786,9 +783,22 @@ class Process(object): TCP_STATUSES) ret.append(nt) self._assert_alive() - return list(ret) + return ret - families, types = conn_tmap[kind] + 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 + + # FreeBSD rawlist = cext.proc_connections(self.pid, families, types) ret = [] for item in rawlist: |