Source code for jammy.comm.utils
import socket
__all__ = ["find_free_port", "get_local_addr", "is_port_used"]
[docs]def find_free_port():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 0))
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
return s.getsockname()[1]
finally:
s.close()
# http://stackoverflow.com/questions/166506/finding-local-ip-addresses-using-pythons-stdlib
[docs]def get_local_addr():
try:
resolve = [
ip
for ip in socket.gethostbyname_ex(socket.gethostname())[2]
if not ip.startswith("127.")
][:1]
if len(resolve):
return resolve[0]
# AF_INET: Address family, ipv4. SOCK_DGRAM: connections, unreliable, datagrams UDP
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
addr = s.getsockname()[0]
s.close()
return addr
except Exception: # pylint: disable=broad-except
try:
return socket.gethostbyname(socket.gethostname())
except Exception: # pylint: disable=broad-except
return "127.0.0.1"
[docs]def is_port_used(port: int):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(("localhost", port)) == 0