获取本地端口

来源:互联网 发布:社会融资规模数据特点 编辑:程序博客网 时间:2024/06/05 14:21
  9 static int16_t
 10 get_local_port()
 11 {
 12         int sock = socket(AF_INET, SOCK_STREAM, 0);
 13         if(sock < 0){
 14            return 0;
 15         }
 16
 17         struct sockaddr_in serv_addr;
 18         bzero((char *) &serv_addr, sizeof(serv_addr));
 19
 20         serv_addr.sin_family = AF_INET;
 21         serv_addr.sin_addr.s_addr = INADDR_ANY;
 22         std::cout<<INADDR_ANY<<std::endl;
 23         serv_addr.sin_port = 0;
 24         
 25         if(bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
 26           return 0;
 27         }
 28
 29         socklen_t len = sizeof(serv_addr);
 30         if(getsockname(sock, (struct sockaddr *)&serv_addr, &len) == -1){
 31           return 0;
 32         }
 33         if( close (sock) < 0)
 34         {
 35                 return 0;
 36         }
 37         return ntohs(serv_addr.sin_port);
 38 }