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
