Subject: Problem with dual IPv4/IPv6 connect

From: Tom Marshall <[email-masked]>
Date: Tue, 16 Nov 2004 15:24:09 -0800

I'm using kernel 2.6.9 from kernel.org and I think I found a small problem
in the dual IPv4/IPv6 connect code.  Here's what happens:

[Note both peer addresses are the same (Solaris 9) machine]

  s = socket(AF_INET6, SOCK_STREAM, 0)
  connect(s, [fec0::203:baff:fe88:5a15]:1554) => EINPROGRESS
  Put socket in select's write set
  Kernel sends TCPv6 SYN
  Kernel receives ICMPv6 Time Exceeded (routing error)
  Socket becomes writable
  getsockopt(s, SO_ERROR) => EHOSTUNREACH
  connect(s, 192.168.168.241:1554) => ECONNABORTED

At this point, if I call connect again with the same arguments, it behaves
normally: EINPROGRESS followed by success.  This leads me to believe that
the IPv6 connect has not updated the socket state properly.

-- 
At Group L, Stoffel oversees six first-rate programmers, a managerial
challenge roughly comparable to herding cats.
        -- The Washington Post Magazine, 9 June, 1985