Search code examples
c++linuxsocketstcpport

Get a random port for TCP connection


I have a client and a server applications. When the client wants to send a file I'm using a TCP connection. when I use a constant port number for the connection it works (The server receives the file).

I want to use a random port so I tried setting the port to 0.

my code is:

bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = 0;

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
    cout << "failed to bind with errno: "<< errno << endl;
    exit(1);
}

The binding works but with port 0 instead of a random port as expected.

What am I doing wrong?


Solution

  • Well, problem solved. I added a call to getsocketname

    if (getsockname(sockfd, (struct sockaddr *)&serv_addr, &len_inet) < 0){
        cout << "failed to get hostname with errno: "<< errno << endl;
        exit(1);
    }