Skip site navigation (1)Skip section navigation (2)
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>