返回信息流```c
struct addrinfo hints, *res;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, "0", &hints, &res);
sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
bind(sockfd, res->ai_addr, res->ai_addrlen);
listen(sockfd, 5);
```
我想知道怎么得到这样是监听的地址是本机地址,然后端口是一个随机可用端口是吧?
然后我想获得这个随机端口怎么办?
目前我网上看的说是可以通过getsockname来得到,到时不知道为什么我每次得到的端口和实际用的不一样……
getsockname使用如下。
```c
struct sockaddr_in s;
socklen_t sLen = sizeof s;
getsockname(sockfd, (struct sockaddr*) &s, &sLen);
printf("%hu\n", s.sin_port);
```
我试了一下,我在getaddrinfo那里端口不写“0”,写成任意一个,比如“45678”。下面得到的端口也还是不一样。求指教……
更新:
用ntohs(s.sin_port)输出的端口号就是对的了。当然我还是不大懂为什么……
这是一条镜像帖。来源:北邮人论坛 / cpp / #95386同步于 2017/5/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问一个socket的问题
cuizhanyuan
2017/5/26镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复