diff --git a/psutil/_common.py b/psutil/_common.py index 48d404490..68fbde193 100644 --- a/psutil/_common.py +++ b/psutil/_common.py @@ -606,13 +606,15 @@ def conn_to_ntuple(fd, fam, type_, laddr, raddr, status, status_map, pid=None): def broadcast_addr(addr): import ipaddress + if not addr.address or not addr.netmask: + return None if addr.family == socket.AF_INET: return str( ipaddress.IPv4Network( f"{addr.address}/{addr.netmask}", strict=False ).broadcast_address ) - elif addr.family == socket.AF_INET6: + if addr.family == socket.AF_INET6: return str( ipaddress.IPv6Network( f"{addr.address}/{addr.netmask}", strict=False diff --git a/psutil/tests/test_system.py b/psutil/tests/test_system.py index aacc9fb0b..e28e04b4a 100755 --- a/psutil/tests/test_system.py +++ b/psutil/tests/test_system.py @@ -860,10 +860,11 @@ def test_net_if_addrs(self): assert addr.broadcast is None # check broadcast address - if addr.broadcast and addr.family in { - socket.AF_INET, - socket.AF_INET6, - }: + if ( + addr.broadcast + and addr.netmask + and addr.family in {socket.AF_INET, socket.AF_INET6} + ): assert addr.broadcast == broadcast_addr(addr) if BSD or MACOS or SUNOS: