[erlang-questions] clarify: SO_REUSEADDR under darwin?

Matthew Reilly <>
Thu Nov 8 06:03:16 CET 2007


Is this on Leopard?

Leopard changed Darwin's behavior  (a bug?) w/ respect to UDP ports and 
bind(). In some cases it returns EADDRINUSE when binding a UDP ports 
under certain conditions.

This issue has caused many apps that use reSIProcate (an open source SIP 
library) to fail under Leopard.

See e.g. http://list.resiprocate.org/archive/resiprocate-devel/msg06360.html
(Note: that link says "disconnect a UDP port", but reSIProcate 
implemented that by binding the UDP port to 0.0.0.0:0, so it was a 
bind() issue)

Paul Mineiro wrote:
> hi.
>
> i've attached a very short erlang program which tries to open two udp
> ports with reuseaddr option.  it works under linux but fails under darwin.
>
> is this a known problem?
>
> i can see the following in the ktrace:
>
> --------
> % ktrace -id -t c erl -eval 'test:test ()' -noshell -noinput -s init stop
> --------
>
> the kdump.out contains:
>
> --------
>  28042 beam     CALL  socket(0x2,0x2,0x11)
>  28042 beam     RET   socket 9
>  28042 beam     CALL  fcntl(0x9,0x3,0)
>  28042 beam     RET   fcntl 2
>  28042 beam     CALL  fcntl(0x9,0x4,0x6)
>  28042 beam     RET   fcntl 0
>  28042 beam     CALL  setsockopt(0x9,0xffff,0x1002,0xbfffe1fc,0x4)
>  28042 beam     RET   setsockopt 0
>  28042 beam     CALL  setsockopt(0x9,0xffff,0x4,0xbfffe1fc,0x4)
>  28042 beam     RET   setsockopt 0
>  28042 beam     CALL  bind(0x9,0xbfffe0e0,0x10)
>  28042 beam     RET   bind -1 errno 48 Address already in use
> --------
>
> setsockopt(0x9,0xffff,0x4,0xbfffe1fc,0x4) looks right:
>
> --------
> % grep -e SO_REUSEADDR -e SOL_SOCKET /usr/include/sys/socket.h
> #define SO_REUSEADDR    0x0004          /* allow local address reuse */
> #define SOL_SOCKET      0xffff          /* options for socket level */
> --------
>
> the only thing i can't verify is that 0xbfffe1fc is a pointer to one.
>
> thanks,
>
> -- p
>
> % dpkg -s erlang-otp | grep Version
> Version: 11b-5-1
> % erl -version
> Erlang (ASYNC_THREADS) (BEAM) emulator version 5.5.5
>
> Optimism is an essential ingredient of innovation. How else can the
> individual favor change over security?
>
>   -- Robert Noyce
> ------------------------------------------------------------------------
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list