Skip to content

Commit b1c1a00

Browse files
committed
BSD: refactor py code related to filtering connections
1 parent 1946190 commit b1c1a00

1 file changed

Lines changed: 18 additions & 42 deletions

File tree

psutil/_psbsd.py

Lines changed: 18 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -423,25 +423,20 @@ def net_connections(kind):
423423

424424
if OPENBSD:
425425
rawlist = cext.net_connections(-1, families, types)
426-
ret = set()
427-
for item in rawlist:
428-
fd, fam, type, laddr, raddr, status, pid = item
429-
if fam in families and type in types:
430-
nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
431-
TCP_STATUSES, pid)
432-
ret.add(nt)
433-
return list(ret)
434426
elif NETBSD:
435427
rawlist = cext.net_connections(-1)
436-
else:
428+
else: # FreeBSD
437429
rawlist = cext.net_connections()
430+
438431
for item in rawlist:
439432
fd, fam, type, laddr, raddr, status, pid = item
440-
# TODO: apply filter at C level
441-
if fam in families and type in types:
442-
nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
443-
TCP_STATUSES, pid)
444-
ret.add(nt)
433+
if NETBSD or FREEBSD:
434+
# OpenBSD implements filtering in C
435+
if (fam not in families) or (type not in types):
436+
continue
437+
nt = conn_to_ntuple(fd, fam, type, laddr, raddr,
438+
status, TCP_STATUSES, pid)
439+
ret.add(nt)
445440
return list(ret)
446441

447442

@@ -785,45 +780,26 @@ def connections(self, kind='inet'):
785780
raise ValueError("invalid %r kind argument; choose between %s"
786781
% (kind, ', '.join([repr(x) for x in conn_tmap])))
787782
families, types = conn_tmap[kind]
783+
ret = []
788784

789785
if NETBSD:
790-
ret = []
791786
rawlist = cext.net_connections(self.pid)
792-
for item in rawlist:
793-
fd, fam, type, laddr, raddr, status, pid = item
794-
assert pid == self.pid
795-
if fam in families and type in types:
796-
nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
797-
TCP_STATUSES)
798-
ret.append(nt)
799-
self._assert_alive()
800-
return ret
801-
802787
elif OPENBSD:
803-
ret = []
804788
rawlist = cext.net_connections(self.pid, families, types)
805-
for item in rawlist:
806-
fd, fam, type, laddr, raddr, status, pid = item
807-
assert pid == self.pid
808-
if fam in families and type in types:
809-
nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
810-
TCP_STATUSES)
811-
ret.append(nt)
812-
self._assert_alive()
813-
return ret
789+
else: # FreeBSD
790+
rawlist = cext.proc_connections(self.pid, families, types)
814791

815-
# FreeBSD
816-
rawlist = cext.proc_connections(self.pid, families, types)
817-
ret = []
818792
for item in rawlist:
819-
fd, fam, type, laddr, raddr, status = item
793+
fd, fam, type, laddr, raddr, status = item[:6]
794+
if NETBSD:
795+
# FreeBSD and OpenBSD implement filtering in C
796+
if (fam not in families) or (type not in types):
797+
continue
820798
nt = conn_to_ntuple(fd, fam, type, laddr, raddr, status,
821799
TCP_STATUSES)
822800
ret.append(nt)
823801

824-
if OPENBSD:
825-
self._assert_alive()
826-
802+
self._assert_alive()
827803
return ret
828804

829805
@wrap_exceptions

0 commit comments

Comments
 (0)