On 8 August 2011 18:47, Martin Sustrik <[email protected]> wrote:

> Hi Steven,
>
> I guess there may be a problem here:
>
>    for (ifaddrs *ifp = ifa; ifp != NULL ;ifp = ifp->ifa_next)
>    {
>        if (ifp->ifa_addr == NULL)
>            continue;
>
>        int family = ifp->ifa_addr->sa_family;
>
>        if ((family == AF_INET
>             || (!ipv4only_ && family == AF_INET6))
>            && !strcmp (interface_, ifp->ifa_name))
>        {
>            memcpy (addr_, ifp->ifa_addr,
>                    (family == AF_INET) ? sizeof (struct sockaddr_in)
>                                        : sizeof (struct sockaddr_in6));
>            found = true;
>            break;
>        }
>    }
>
> Specifically, if you have both IPv4 and IPv6 interface with the same name
> and ipv4only is false, it depends on ordering of the results in getifaddrs()
> resultset which of those two is returned.
>
> I would suppose in such case IPv6 address should be returned.
>
>
 I think I would prefer if the entire adapter was used in bind ("eth0"),
therefore a return value of in6addr_any with the sin6_scope_id set
appropriately would be more sound.

-- 
Steve-o
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to