@@ -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