On localhost, how do I pick a free port number?

named pipe | StackOverflow

I"m trying to play with inter-process communication and since I could not figure out how to use named pipes under Windows I thought I"ll use network sockets. Everything happens locally. The server is able to launch slaves in a separate process and listens on some port. The slaves do their work and submit the result to the master. How do I figure out which port is available? I assume I cannot listen on port 80 or 21?

I"m using Python, if that cuts the choices down.

Answer rating: 252

Do not bind to a specific port. Instead, bind to port 0:

sock.bind(("", 0))

The OS will then pick an available port for you. You can get the port that was chosen using sock.getsockname()[1], and pass it on to the slaves so that they can connect back.

sock is the socket that you created, returned by socket.socket.

Answer rating: 76

For the sake of snippet of what the guys have explained above:

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()[1]

On localhost, how do I pick a free port number?: StackOverflow Questions

Get Solution for free from DataCamp guru