bind()服务器套接字到任何端口总是给端口号。 0

时间:2013-12-19 09:55:19

标签: c++ sockets

我需要将我的服务器绑定到动态端口(使用ephermal端口),但是当端口指定为0(这意味着任何随机端口)始终将服务器绑定到端口0时,调用bind()。

//示例代码段

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);

1 个答案:

答案 0 :(得分:2)

你似乎在发明自己的语义。

如果您查看bind(2) manpage,您会看到第二个参数为const struct sockaddr *addr,但您希望在调用bind()后更新它。

请参阅此SO question,了解如何确定bind()内分配的端口。