Binding to "any"

Marcus Rueckert darix at web.de
Mon May 14 17:50:27 CEST 2007


On 2007-05-14 16:50:58 +0200, Dag-Erling Smørgrav wrote:
> Currently, there is a known issue with varnishd on FreeBSD, where if you
> run it with "-a :80" it will only bind to IN6ADDR_ANY instead of both
> INADDR_ANY and IN6ADDR_ANY.
> 
> This is not easy to solve.  The obvious fix, which is to bind to *all*
> addresses returned by getaddrinfo() instead of just the first one, will
> work on FreeBSD, but not on Linux, where you can't bind to the same port
> on both INADDR_ANY and IN6ADDR_ANY.
> 
> On Linux, the current behaviour is good enough - binding to either
> INADDR_ANY or IN6ADDR_ANY will give you both.

bind the ipv6 binds with IPV6_ONLY. than you get the same behavior as
on *BSD. postfix does that e.g. you just need to detect the socket type.

> On FreeBSD, if we want both *and* the kernel has IPv6 support compiled
> in, we can bind to IN6ADDR_ANY and clear the IPV6_V6ONLY socket option
> (it defaults to on).  If the kernel does *not* have IPv6 support
> compiled in, getaddrinfo() will still return both INADDR_ANY and
> IN6ADDR_ANY, but we binding to IN6ADDR_ANY will fail.
> 
> I don't see any good way out of this mess - we're pretty much forced to
> special-case the "any" case.
> 
> I've looked at other network servers, such as Apache and OpenSSH, and
> they pretty much universally solve (or rather avoid) this issue by
> explicitly specifying either 0.0.0.0 (INADDR_ANY) or :: (IN6ADDR_ANY) as
> the default listening address.

think so too.

    darix

-- 
           openSUSE - SUSE Linux is my linux
               openSUSE is good for you
                   www.opensuse.org



More information about the varnish-dev mailing list