Find a free TCP port starting from `start`.
(start: int = 9123)
| 59 | |
| 60 | |
| 61 | def _find_free_port(start: int = 9123) -> int: |
| 62 | """Find a free TCP port starting from `start`.""" |
| 63 | for port in range(start, start + 100): |
| 64 | with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: |
| 65 | try: |
| 66 | s.bind(("", port)) |
| 67 | return port |
| 68 | except OSError: |
| 69 | continue |
| 70 | raise OSError(f"No free port found in range {start}–{start + 99}") |
| 71 | |
| 72 | |
| 73 | class _ReuseAddrTCPServer(socketserver.TCPServer): |