Do not bind to a specific port. Instead, bind to port 0:
The OS will then pick an available port for you. You can get the port that was chosen using
sock.getsockname(), and pass it on to the slaves so that they can connect back.
import socket from contextlib import closing def find_free_port(): with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: s.bind(('', 0)) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) return s.getsockname()