Date: Sun, 21 Feb 2016 17:59:18 -0800 From: Manfred Antar <null@pozo.com> To: David Flater <dave@flaterco.com> Cc: vanilla@FreeBSD.org, FreeBSD Ports ML <freebsd-ports@freebsd.org> Subject: Re: xtide 2.15 on FreeBSD-current amd64 Message-ID: <DBD1EDD1-0FCE-4D1D-B294-CB3A937F5B0A@pozo.com> In-Reply-To: <56CA6368.4030304@flaterco.com> References: <86A01DE5-6592-4F9C-A224-F870F0C5517B@pozo.com> <56C9BD0E.7070301@flaterco.com> <89BBBB54-8BF1-4E61-A426-0B8D30DDE654@pozo.com> <56CA6368.4030304@flaterco.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> On Feb 21, 2016, at 5:24 PM, David Flater <dave@flaterco.com> wrote: >=20 > On 02/21/2016 11:58 AM, Manfred Antar wrote: >> Same error in syslog CANT_GET_SOCKET. >=20 > Please test this patch against the xttpd of xtide-2.15. >=20 > DWF >=20 > Index: xttpd.cc > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- xttpd.cc (revision 6265) > +++ xttpd.cc (working copy) > @@ -258,7 +258,21 @@ > Global::xperror ("setsockopt"); > } > } > - bool bound =3D (bind(s,(sockaddr *)&addr,sizeof(addr))=3D=3D0); > + > + // 2016-02-21 Manfred Antar reported "bind: Invalid argument" occurri= ng on > + // FreeBSD and OS X as a regression from 2.14 when trying to bind port > + // 8080, with or without an explicit address. The only change that sh= ould > + // have been visible to bind is that the size argument got bigger. The > + // FreeBSD man page for bind states that EINVAL can be raised if "the > + // addrlen argument is not a valid length for the address family." I = guess > + // this means that apps making use of sockaddr_storage are supposed to= lie > + // about the length. The linux man page similarly states that EINVAL = can > + // be raised if "the addrlen is wrong" but the problem does not reprod= uce > + // with my libc. > + const socklen_t addrlen (addr.ss_family=3D=3DAF_INET6 ? sizeof(sockadd= r_in6) > + : sizeof(sockaddr_in= )); > + > + bool bound =3D (bind(s,(sockaddr *)&addr,addrlen)=3D=3D0); > int yerrno =3D errno; > if (!bound && addr.ss_family =3D=3D AF_INET6) { >=20 > @@ -288,7 +302,7 @@ >=20 > for (unsigned magic=3D4; !bound && magic>0; --magic) { > ((sockaddr_in6 *)&addr)->sin6_scope_id =3D magic; > - bound =3D (bind(s,(sockaddr *)&addr,sizeof(addr))=3D=3D0); > + bound =3D (bind(s,(sockaddr *)&addr,addrlen)=3D=3D0); > } > } > // Report the error from the first failure so that it won't be obscured= by That works here on FreeBSD-current amd64 and also on OS X El Capitan. Thanks !!!!!!
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DBD1EDD1-0FCE-4D1D-B294-CB3A937F5B0A>