getaddrinfo()を使用してすべてのアドレス(IPv4およびIPv6)を読み取りたい。私の質問は、getaddrinfo()がリスト内のIPv6アドレスの後にIPv4を返すかどうかです。AF_UNSPECをgetaddrinfo()に渡し、デュアルスタックを使用していると仮定します。
3 に答える
すでにCeladaによってコメントされているように、RFC 3484は、返される結果の推奨される順序を示しています。
特にGNUlibcの場合、順序は/etc/gai.conf
ローカルポリシーによって制御され、カスタマイズできます。
答えはここにあります:
https://www.rfc-editor.org/rfc/rfc6724
オペレーティングシステムは、この標準または以前のバージョンに準拠する必要があります(ほとんどの場合準拠しています)。アプリケーションが特定のアドレスにバインドされていない場合、カーネルは宛先アドレスをgetaddrinfo()
選択するときに送信元アドレスを選択します。
デフォルトでは、グローバルネイティブIPv6アドレスがすべてのIPv4アドレスよりも優先されます。
それは実際にはネームサーバーとOSに依存します。getaddrinfo()は、ネームサーバーからDNS解決情報をフェッチします。ネームサーバーがIPv4アドレスの前にIPv6アドレスを注文すると、IPv4アドレスの前にIPv6アドレスが返されます。
デフォルトでは、IPv6アドレスの方がIPv4アドレスよりも優先されます。@Pavel Simerdaは次のように書いています。「デフォルトでは、グローバルネイティブIPv6アドレスがすべてのIPv4アドレスよりも優先されます。」