[erlang-questions] clarify: SO_REUSEADDR under darwin?

Serge Aleynikov <>
Fri Nov 9 14:00:24 CET 2007


Per Hedeland wrote:
> Actually no, it says that for multicast *addresses*, it is (there's no
> such thing as a multicast port:-). And this seems to be true on all of
> Linux, Darwin, and FreeBSD. I.e. you need to pass in an actual multicast
> address to bind to, instead of letting it default to the wildcard
> address - then reuseaddr is enough:
> 
> mars 9> uname -sr
> FreeBSD 6.2-STABLE-200709
> mars 10> erl
> Erlang (BEAM) emulator version 5.5.5 [source] [async-threads:0] [hipe]
> 
> Eshell V5.5.5  (abort with ^G)
> 1> Port=4545.
> 4545
> 2> gen_udp:open(Port, [{reuseaddr, true}, {ip, {224,0,1,1}}]).
> {ok,#Port<0.96>}
> 3> gen_udp:open(Port, [{reuseaddr, true}, {ip, {224,0,1,1}}]).
> {ok,#Port<0.97>}
> 4> gen_udp:open(Port, [{reuseaddr, true}, {ip, {224,0,1,1}}]).
> {ok,#Port<0.98>}

Is this the "right" way of joining a multicast group though?  I've been 
using the "undocumented" add_membership inet option to accomplish that 
(though haven't tried it on anything other than Win, Linux, Solaris):

gen_udp:open(Port, [{reuseaddr, true}, {add_membership, {Addr, 
Interface}}]).

I haven't checked the inet_drv, but does it actually check if in the 
{ip, Addr} option Addr refers to a multicast range and sets the 
IP_ADD_MEMBERSHIP option?

Serge



More information about the erlang-questions mailing list