获取用于TCP连接的随机端口

Ita*_*Gal 1 c++ sockets linux port tcp

我有一个客户端和一个服务器应用程序。当客户端要发送文件时,我正在使用TCP连接。当我为连接使用恒定端口号时,它可以工作(服务器接收文件)。

我想使用随机端口,因此尝试将端口设置为0。

我的代码是:

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);
}
Run Code Online (Sandbox Code Playgroud)

绑定有效,但使用端口0而不是预期的随机端口。

我究竟做错了什么?

Ita*_*Gal 5

好了,问题解决了。我添加了一个呼叫getsocketname

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