codekingpro/portable-devtools
114k
1import socket2 3 4def get_free_port() -> int:5 """6 Get a port that's free for both TCP and UDP.7 8 This method never raises. If no free port can be found, 0 is returned.9 """10 for _ in range(10):11 tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)12 udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)13 14 try:15 tcp.bind(("", 0))16 port: int = tcp.getsockname()[1]17 udp.bind(("", port))18 udp.close()19 return port20 except OSError:21 pass22 finally:23 tcp.close()24 25 return 026 