-1
我需要将服务器绑定到一个动态端口(使用ephermal端口),但是当被指定的端口为0(这意味着任何随机端口)调用来结合()将服务器总是绑定到端口0bind()服务器套接字到任何端口总是给端口号。 0
//示例代码段
int sockfd;
struct sockaddr_in serv_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
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 = htons(INADDR_ANY); //randomly selected port
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);
printf("Port no. is %d",ntohs (serv_addr.sin_port));
close(sockfd);
为什么你将'sin_port'设置为'htons(INADDR_ANY)'而不是'0'?这在语义上没有意义。此外,您应该使用'getsockname'来查找您的服务器正在侦听的实际套接字。 –