gpt4 book ai didi

c - getaddrinfo 不一致的行为

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:11 25 4
gpt4 key购买 nike

我正在使用 getaddrinfo 来启动一个本地服务器,它只接受本地主机上的连接:

struct addrinfo *res;
struct addrinfo hints = {0};
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
getaddrinfo(NULL, portbuf, &hints, &res);

这似乎工作正常,当 IPv6 存在时给我 IPv6 地址::1,当 IPv6 不存在时给我 IPv4 地址。
除了有时在 Windows 2008 R2 上(至少这是我见过的唯一系统,但我见过两次,两次都是在客户系统上)它被绑定(bind)到 127.0.0.1 而不是 IPv6!
这让我很困惑,因为如果你绑定(bind)::1,它将接受到 127.1 和::1 的连接,但如果你绑定(bind) 127.1,那么 IPv6 连接将不被接受。

最佳答案

getaddrinfo() 以未指定的顺序向您返回匹配地址的列表。您应该遍历列表(跟随 ai_next 指针),并创建一个绑定(bind)到每个返回地址的监听套接字。

关于c - getaddrinfo 不一致的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3473743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com