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.

Reply via email to