Now that the world at large is waking up to IPv6, one problem I kept tripping over is that dial(2) tries addresses serially, and since it's not unusual for IPv6 connectivity to be broken, and since DNS servers randomise the order of IP addresses they return, it's quite possible to hang for a long time trying to connect to a v6 (or, with multi-homing, v4) address before getting to one that works.
I've just pushed out to sources a new dial implementation and changes to ndb/cs and ndb/dns to cope better in this new world, including updated manual pages. The new dial dials multiple addresses concurrently and uses the first connection that completes. The dial change will cause dozens of programs to be recompiled on sources later today. ndb/cs will now return IPv6 addresses obtained from DNS AAAA records when queried for IP addresses. This behaviour can be disabled by invoking cs with -4 and can be toggled by writing "ipv6" to /net/cs. ndb/dns now has shorter time-outs and fewer UDP retransmissions, and uses millisecond (rather than second) resolution internally for most time-outs. If this is a problem for you, you may want to adjust the enum constants at the top of ndb/dnresolve.c, but beware that they can multiply connection delays.