Yes, that seems like the simplest stupid solution. It would let us
also do IPv4 and IPv6 at the same time, as you say.

On Wed, Jan 1, 2014 at 7:27 PM, Lindley French <[email protected]> wrote:
> Binding a separate socket to each interface (in fact, binding separately to
> IPv6 and IPv4 addresses) has worked well for me in the past. Then just
> select() on all of them.
>
>
> On Wed, Jan 1, 2014 at 10:15 AM, Pieter Hintjens <[email protected]> wrote:
>>
>> Looking at this, it's non-trivial. Here's more explanation and sample
>> code:
>> http://bert-hubert.blogspot.fr/2012/10/on-binding-datagram-udp-sockets-to-any.html
>>
>> I'm thinking that we could make a portable alternative, which is to
>> create multiple UDP sockets, one for each interface. Rather than bind
>> to INADDR_ANY, we could bind each socket to a specific interface, and
>> then it's easy to get the ipaddress for each socket. It's easy to poll
>> on multiple sockets.
>>
>> Thoughts?
>>
>> -Pieter
>>
>>
>>
>> On Wed, Jan 1, 2014 at 4:01 PM, Pieter Hintjens <[email protected]> wrote:
>> > On Sat, Dec 28, 2013 at 11:25 AM, Arnaud Loonstra <[email protected]>
>> > wrote:
>> >
>> >> Because zbeacon passes the ipaddress on to the agent which the
>> >> zyre_node
>> >> uses...
>> >
>> > Right... HELLO message isn't the beacon, my mistake. The node will
>> > connect using the HELLO's ipaddress only if it didn't already get a
>> > beacon from that node.
>> >
>> > You're right that the ipaddress will be wrong in cases with multiple
>> > interfaces. This could be improved... right now the Zyre internals
>> > just don't allow for that. It should pick-up the hostname dynamically
>> > each time it sends HELLO.
>> >
>> > Alternatively, as you say, it could get the originating IP address of
>> > each HELLO message. That is more work. The libzmq API doesn't provide
>> > that directly (we could extract it at authentication time, from
>> > ZMQ/4.0 and later).
>> >
>> > So option 1 then. The flow is, A gets beacon from B, and then connects
>> > to B and sends HELLO. B receives HELLO from A, and connects back to A.
>> > So A knows what address it received a beacon on.
>> >
>> > It seems we need to use recvmsg() instead of recvfrom(). There's an
>> > example here:
>> >
>> >
>> > http://stackoverflow.com/questions/5281409/get-destination-address-of-a-received-udp-packet
>> >
>> > So then, zbeacon would update its hostname property after each recv,
>> > and the caller could use this to construct an accurate HELLO message.
>> >
>> > -Pieter
>> _______________________________________________
>> zeromq-dev mailing list
>> [email protected]
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
>
>
> _______________________________________________
> zeromq-dev mailing list
> [email protected]
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to