xtide 2.15 on FreeBSD-current amd64
Manfred Antar
null at pozo.com
Mon Feb 22 01:59:38 UTC 2016
> On Feb 21, 2016, at 5:24 PM, David Flater <dave at flaterco.com> wrote:
>
> On 02/21/2016 11:58 AM, Manfred Antar wrote:
>> Same error in syslog CANT_GET_SOCKET.
>
> Please test this patch against the xttpd of xtide-2.15.
>
> DWF
>
> Index: xttpd.cc
> ===================================================================
> --- xttpd.cc (revision 6265)
> +++ xttpd.cc (working copy)
> @@ -258,7 +258,21 @@
> Global::xperror ("setsockopt");
> }
> }
> - bool bound = (bind(s,(sockaddr *)&addr,sizeof(addr))==0);
> +
> + // 2016-02-21 Manfred Antar reported "bind: Invalid argument" occurring 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 should
> + // 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 reproduce
> + // with my libc.
> + const socklen_t addrlen (addr.ss_family==AF_INET6 ? sizeof(sockaddr_in6)
> + : sizeof(sockaddr_in));
> +
> + bool bound = (bind(s,(sockaddr *)&addr,addrlen)==0);
> int yerrno = errno;
> if (!bound && addr.ss_family == AF_INET6) {
>
> @@ -288,7 +302,7 @@
>
> for (unsigned magic=4; !bound && magic>0; --magic) {
> ((sockaddr_in6 *)&addr)->sin6_scope_id = magic;
> - bound = (bind(s,(sockaddr *)&addr,sizeof(addr))==0);
> + bound = (bind(s,(sockaddr *)&addr,addrlen)==0);
> }
> }
> // 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 !!!!!!
More information about the freebsd-ports
mailing list