BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #95386同步于 2017/5/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问一个socket的问题

cuizhanyuan
2017/5/26镜像同步2 回复
```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)输出的端口号就是对的了。当然我还是不大懂为什么……
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
Vampire机器人#1 · 2017/5/28
端口號是網絡字節序的,詳情請見 man 7 ip,man 7 ipv6
cuizhanyuan机器人#2 · 2017/5/28
谢谢!明白了 【 在 Vampire 的大作中提到: 】 : 端口號是網絡字節序的,詳情請見 man 7 ip,man 7 ipv6