Thanks for the explanation, Eliot.

I am not sure there is a problem resolving localhost and binding to it, as the 
server did work in the case described, it was just not accessible by curl.

I guess we might have to shake down some issue with ipv6 in the future, we'll 
see.

On 14 Jun 2014, at 16:17, Eliot Miranda <[email protected]> wrote:

> Hi Sven,
> 
> 
> On Sat, Jun 14, 2014 at 4:09 AM, Sven Van Caekenberghe <[email protected]> wrote:
> 
> On 14 Jun 2014, at 12:18, Ben Coman <[email protected]> wrote:
> 
> > Sven Van Caekenberghe wrote:
> >> In any case, the server socket used is normally listening on all 
> >> interfaces [0.0.0.0]
> >>
> >> Sven
> >>
> >>
> >
> > Maybe it matters that [0.0.0.0] is the IPv4-Unspecified-Address
> > and it might make a difference to use IPv6-Unspecified-Address 
> > [0:0:0:0:0:0:0:0] or [::]
> >
> > cheers -ben
> 
> I guess it all depends on the Socket plugin. ZnServer has #bindingAddress: 
> which eventually calls Socket>>#listenOn:backlogSize:interface: but the 
> question is, what is acceptable as last argument. And how is the difference 
> between v4 and v6 handled. There is a 'primitives-ipv6' category, but no 
> #listenOn with an interface there.
> 
> I wonder whether this commit is relevant:
> 
> r2552 | eliot | 2012-05-02 16:13:02 -0700 (Wed, 02 May 2012) | 19 lines
> 
> CogVM source as per VMMakerr.oscog-eem.159
> ...
> 
> Fix limitation in platforms/unix/plugins/SocketPlugin/sqUnixSocket.c which 
> could
> cause NetNameResolver localHostAddress to answer 0 (if host has a set hostname
> not being honoured by local DNS servers).  Fix falls back to localhost.
> ...
> 
> Here's the relevant part of the 
> platforms/unix/plugins/SocketPlugin/sqUnixSocket.c change:
> 
> -sqInt sqResolverLocalAddress(void)             { return 
> nameToAddr(localHostName); }
> +sqInt sqResolverLocalAddress(void)
> +{      sqInt localaddr = nameToAddr(localHostName);
> +       if (!localaddr)
> +               localaddr = nameToAddr("localhost");
> +       return localaddr;
> +}
> 
> This fixed several socket tests on my Mac OS box.  I think it affects systems 
> behind a broadband router, at least that's how it asffected me on my laptop 
> at home.  And here's what is probably the root cause in 
> platforms/unix/plugins/SocketPlugin/sqUnixSocket.c:
> 
> ...
> static char   localHostName[MAXHOSTNAMELEN];
> static u_long localHostAddress; /* GROSS IPv4 ASSUMPTION! */
> ...
> /* start a new network session */
> 
> sqInt sqNetworkInit(sqInt resolverSemaIndex)
> {
>   if (0 != thisNetSession)
>     return 0;  /* already initialised */
>   gethostname(localHostName, MAXHOSTNAMELEN);
>   localHostAddress= nameToAddr(localHostName);
>   thisNetSession= clock() + time(0);
>   if (0 == thisNetSession)
>     thisNetSession= 1;  /* 0 => uninitialised */
>   resolverSema= resolverSemaIndex;
>   return 0;
> }
> ...
> and so if gethostname answers something weird, attempts to access localHost 
> are screwed from initialization on.
> 
> HTH
> --
> best,
> Eliot


Reply via email to