After upgrading to glibc 2.3.3_pre20040529, I noticed the resolver prefers A records instead of AAAA records, if a hostname has both. The application (wget, telnet, ssh, etc.) will resolve both addresses, but pick the IPv4 one by default. From what I understand, this is an incorrect behavior. Libraries and applications that are IPv6-aware should try the IPv6 address first, and if that fails, then fall back to IPv4. I believe this is stated in an RFC, too. Reproducible: Always Steps to Reproduce: 1. Use wget/ssh/telnet/etc. to connect to a hostname that has both A and AAAA records 2. Notice that the IPv4 address is chosen before the IPv6 one. Actual Results: The IPv4 address was chosen, instead of the IPv6 one. Expected Results: The IPv6 address should have been tried first. If that failed, it should fall back to the IPv4 one. Portage 2.0.50-r7 (default-amd64-2004.0, gcc-3.3.3, glibc-2.3.3_pre20040529-r0, 2.6.5-gentoo-r1) ================================================================= System uname: 2.6.5-gentoo-r1 x86_64 4 Gentoo Base System version 1.4.15 Autoconf: sys-devel/autoconf-2.58-r1 Automake: sys-devel/automake-1.8.3 ACCEPT_KEYWORDS="amd64" AUTOCLEAN="yes" CFLAGS="-O2" CHOST="x86_64-pc-linux-gnu" COMPILER="gcc3" CONFIG_PROTECT="/etc /usr/X11R6/lib/X11/xkb /usr/kde/2/share/config /usr/kde/3/share/config /usr/lib/mozilla/defaults/pref /usr/share/config /var/qmail/control" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-O2" DISTDIR="/usr/portage/distfiles" FEATURES="autoaddcvs ccache sandbox" GENTOO_MIRRORS="http://mirrors.acm.cs.rpi.edu/gentoo http://gentoo.noved.org/" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="X acpi alsa amd64 apache2 apm avi berkdb cdr crypt cups dvd encode esd flac foomaticdb gd gdbm gif gpm gtk gtk2 imap imlib ipv6 jpeg kde libg++ libwww maildir mbox mikmod motif mozilla mpeg mysql ncurses nls nogcj oggvorbis opengl oss pam pdflib perl png python quicktime readline sdl slang spell ssl tcpd tiff truetype usb xml2 xmms xv zlib"
Do you have such RFC by hand? At present, IPv6 is still experimental (=not widely working), IPv4 is still "the snatdard". Why "applications" choose IPv4 by default? Because it is more stable. Most of them have otions (usually -6) to make them prefer IPv6. IMHO, which is preferred should be a system setting (like somewhere in /proc), changeble on the fly, but at the moment it is not. Aiting for broken IPv6 implementations to time out is simply no good though. If I was writing a network application (for the moment) -4 -6 and --prefer-IPv6 --prefer-IPv4 whould have been a standard set of options (-4 -6 meaning use *only*). There was a similar discussion wheather gethostbyname() should sort (or randomize) the list of names on return. IMHO it is up to the application to choose wheather to use the firs in the list (simple logic), some random one (daubtfully better) or a few (all) in parallel (=waste of resources). Every approach is app-specific and glibc cannot know what is required. I suggest wonfix for this one, unless somebody comes with a working patch to change that at runtime as system config.
You might try to change in /etc/nsswitch.conf: -- hosts: files dns6 dns -- not 100% sure if its supported though by glibc ...
Why would you spend time waiting for broken IPv6 implementations if you don't have IPv6 support in kernel? On the other hand why would you build IPv6 into your kernel unless you want to use it, test it or do developement? BUT you can't drop IPv4 from linux kernel, so you end up timeouting when connecting on dual stack hosts if they don't serve on IPv4.
this seems to be covered here: http://sources.redhat.com/bugzilla/show_bug.cgi?id=524 http://sources.redhat.com/bugzilla/show_bug.cgi?id=84