0

PHP curl は getaddrinfo() を使用して、ホスト名を IP アドレスに解決します。オプションを設定することで、IPV4 アドレスを検索するようにするのは簡単ですが、ネットワーク上で IPv6 を適切に実行できるようになると、かなりの作業が必要になり、元に戻すのが非常に困難になります。

getaddrinfo() をデフォルトで Ubuntu サーバー全体の IPv4 ルックアップに設定する方法はありますか?

ありがとうウェイン

4

2 に答える 2

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 が起動して実行されたら、関数の内部の「デフォルト」を変更します。

于 2012-12-11T10:04:49.683 に答える
1

Linux では、 の動作をgetaddrinfo()で微調整できます/etc/gai.conf。このファイルを使用して IPv6 アドレスが返されないようにすることはできませんが、IPv6 アドレスよりも IPv4 アドレスを優先するために使用できます。

実際には、PHP/Curl にAI_ADDRCONFIGフラグをに渡すgetaddrinfo()だけで、マシンに現在 IPv6 アドレスが構成されている場合にのみ IPv6 アドレスが返されます。

于 2012-12-11T13:14:34.037 に答える