手册页说:
getaddrinfo(3) 函数不仅限于创建 IPv4 套接字地址结构;如果 IPv6 支持可用,则可以创建 IPv6 套接字地址结构。这些套接字地址结构可以直接由bind(2) 或connect(2) 使用,以准备客户端或服务器套接字。
我应该做什么来getaddrinfo
强制不是创建 IPv6 套接字地址结构?
答案1
有趣的是,我问的第一个问题这个网站上有一个您可能会觉得有用的答案。
总而言之,/etc/gai.conf
getaddrinfo() 系统调用使用该文件来确定如何响应。对于您的特定情况,添加
precedence ::ffff:0:0/96 100
到配置文件的末尾应该足够了。
答案2
根据 的联机帮助页getaddrinfo()
,您可以在参数中传递地址族hints
,因此类似于
struct addrinfo 提示,*结果; 整数; memset(&提示, 0, sizeof(提示)); 提示.ai_family = AF_INET; /* 或 AF_INET6 对于 ipv6 地址 */ s = getaddrinfo(NULL, "ftp", &hints, &result); ...
我没有尝试过,但这种方法似乎是正确的。