Branch: Tag:

2013-09-03

2013-09-03 20:26:25 by Tobias S. Josefowitz <tobij@tobij.de>

Stdio.UDP: bind now has an additional no_reuseaddr parameter so that users can opt out of setting SO_REUSEADDR.

It turns out that with newer Linux kernels at least, setting
SO_REUSEADDR on UDP is not such a good idea. It probably never was very
helpful even before the change in Linux. Setting it as a default is a
bit cumbersome.

2726:   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>bind</b></span>   </dt> - <dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>bind</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code><b>)</b></code><br> - <code><code class='object unresolved'>UDP</code> <b><span class='method'>bind</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>string</code> <code class='argument'>address</code><b>)</b></code></p></dd> + <dd><p><code><code class='object unresolved'>UDP</code> <b><span class='method'>bind</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>port</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>address</code>, <code class='datatype'>string</code>|<code class='datatype'>bool</code> <code class='argument'>no_reuseaddr</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Binds a port for receiving or transmitting UDP.</p>   </dd> -  + <dt class='head--doc'><span id='p-no_reuseaddr'></span>Parameter <code class='parameter'>no_reuseaddr</code></dt> + <dd></dd><dd class='body--doc'><p>If set to <code class='expr'>1</code>, Pike will not set the <code class='expr'>SO_REUSEADDR</code> option +  on the UDP port.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p><code class='expr'>SO_REUSEADDR</code> is never applied when binding a random port +  (<code class='expr'>bind(0)</code>).</p> + <p> In general, <code class='expr'>SO_REUSEADDR</code> is not desirable on UDP ports. +  Unless used for receiving multicast, be sure to never bind a +  non-random port without setting <code class='expr'>no_reuseaddr</code> to <code class='expr'>1</code>.</p> + </dd>   <dt class='head--doc'>Throws</dt>   <dd class='body--doc'><p>Throws error when unable to bind port.</p>   </dd></dl>