Re: binding UDP port 0 with SO_REUSEADDR
From: Jan Engelhardt <hidden>
Date: 2012-08-21 09:09:57
On Thursday 2012-08-02 18:57, Eric Dumazet wrote:
quoted
SO_REUSEADDR Indicates that the rules used in validating addresses supplied in a bind(2) call should allow reuse of local addresses. For AF_INET sockets this means that a socket may bind, except when there is an active listening socket bound to the address. When the listening socket is bound to INADDR_ANY with a specific port then it is not possible to bind to this port for any local address. Argument is an integer boolean flag. I think the surprise-factor of the bind-0-behaviour even increased for me. Is there a specific reason for handing out used ports when binding port 0 with REUSEADDR?There is no concept of listening sockets for UDP. This documentation applies for TCP, and makes no sense for UDP. There is no value using 'port 0' and REUSEADDR on UDP, really.
Setting REUSEADDR on one UDP socket currently has the added effect that bind(2) on another UDP socket for the same tuple will never complain with -EADDRINUSE. This behavior - willingly or not - is used in practice by socat(1)'s udp-listen mode.