linux获取本地已绑定地址(getsockname)
// bind
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.1.33");
addr.sin_port = htons(8000);
result = bind(sockfd,(struct sockaddr*)&addr,sizeof(struct sockaddr));
if(result < 0)
{
perror("bind");
close(sockfd);
exit(1);
}
// getsockname
struct sockaddr_in myaddr;
int myaddr_len = sizeof(myaddr);
char bind_ip[20] = {0};
getsockname(sockfd, (struct sockaddr *)&myaddr, &myaddr_len);
inet_ntop(AF_INET, &myaddr.sin_addr, bind_ip, sizeof(bind_ip));
// bind
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.1.33");
addr.sin_port = htons(8000);
result = bind(sockfd,(struct sockaddr*)&addr,sizeof(struct sockaddr));
if(result < 0)
{
perror("bind");
close(sockfd);
exit(1);
}
// getsockname
struct sockaddr_in myaddr;
int myaddr_len = sizeof(myaddr);
char bind_ip[20] = {0};
getsockname(sockfd, (struct sockaddr *)&myaddr, &myaddr_len);
inet_ntop(AF_INET, &myaddr.sin_addr, bind_ip, sizeof(bind_ip));
printf(" my addr %s:%d\n", bind_ip, ntohs(myaddr.sin_port));
// 未绑定时获取的是0.0.0.0:0