强制 getaddrinfo 使用 IPv4

强制 getaddrinfo 使用 IPv4

手册页说:

getaddrinfo(3) 函数不仅限于创建 IPv4 套接字地址结构;如果 IPv6 支持可用,则可以创建 IPv6 套接字地址结构。这些套接字地址结构可以直接由bind(2) 或connect(2) 使用,以准备客户端或服务器套接字。

我应该做什么来getaddrinfo强制不是创建 IPv6 套接字地址结构?

答案1

有趣的是,我问的第一个问题这个网站上有一个您可能会觉得有用的答案。

总而言之,/etc/gai.confgetaddrinfo() 系统调用使用该文件来确定如何响应。对于您的特定情况,添加

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);
...

我没有尝试过,但这种方法似乎是正确的。

相关内容