是否可以将getaddrinfo()设置为仅默认检索IPV4地址?

时间:2012-12-11 09:36:35

标签: php c linux ipv4

Php curl使用getaddrinfo()将主机名解析为IP地址。通过设置一个选项,很容易让它查找IPV4地址,但这需要做很多工作,当我们在网络上正常运行并正常运行时,很难撤消。

有没有办法将getaddrinfo()设置为默认为我们整个Ubuntu服务器的IPv4查找?

由于 韦恩

2 个答案:

答案 0 :(得分:3)

此解决方案适用于C,不确定php。在调用getaddrinfo时,您传递一个struct addrinfo,提供关于您要查找的内容的“提示”。以下示例

  struct addrinfo *res;
  struct addrinfo hints;
  memset(&hints, 0, sizeof(hints));
  hints.ai_family = PF_INET;
  hints.ai_flags = AI_PASSIVE;
  hints.ai_socktype = SOCK_STREAM;

  getaddrinfo("localhost", "80", &hints, &res);

在我的评论中复制,因为它似乎适用于答案:

  

只需为getaddrinfo创建一个包装函数即可   “默认值”。然后在整个应用程序中使用包装器功能。   当ipv6启动并运行时,更改该功能的内部“默认”。

答案 1 :(得分:1)

在Linux上,可以使用getaddrinfo()调整/etc/gai.conf的行为。您不能使用此文件来阻止返回IPv6地址,但您可以使用它来优先处理IPv6地址上的IPv4地址。

实际上,您只是希望PHP / Curl将AI_ADDRCONFIG标志传递给getaddrinfo(),这将导致它仅在机器当前配置了IPv6地址时才返回IPv6地址。