PHP curl は getaddrinfo() を使用して、ホスト名を IP アドレスに解決します。オプションを設定することで、IPV4 アドレスを検索するようにするのは簡単ですが、ネットワーク上で IPv6 を適切に実行できるようになると、かなりの作業が必要になり、元に戻すのが非常に困難になります。
getaddrinfo() をデフォルトで Ubuntu サーバー全体の IPv4 ルックアップに設定する方法はありますか?
ありがとうウェイン
このソリューションは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 が起動して実行されたら、関数の内部の「デフォルト」を変更します。
Linux では、 の動作をgetaddrinfo()
で微調整できます/etc/gai.conf
。このファイルを使用して IPv6 アドレスが返されないようにすることはできませんが、IPv6 アドレスよりも IPv4 アドレスを優先するために使用できます。
実際には、PHP/Curl にAI_ADDRCONFIG
フラグをに渡すgetaddrinfo()
だけで、マシンに現在 IPv6 アドレスが構成されている場合にのみ IPv6 アドレスが返されます。