Nice catch, so something like this shall fix it <div><div>diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl</div><div>index 327e0f9..8a9b1ab 100644</div><div>--- a/lib/kernel/src/inet.erl</div><div>+++ b/lib/kernel/src/inet.erl</div>
<div>@@ -1262,6 +1262,8 @@ udp_close(S) when is_port(S) -></div><div> %% Set controlling process for TCP socket.</div><div> tcp_controlling_process(S, NewOwner) when is_port(S), is_pid(NewOwner) -></div><div>     case erlang:port_info(S, connected) of</div>
<div>+       {connected, NewOwner}-></div><div>+            ok;</div><div>        {connected, Pid} when Pid =/= self() -></div><div>            {error, not_owner};</div><div>        undefined -></div><div>@@ -1313,6 +1315,8 @@ tcp_sync_input(S, Owner, Flag) -></div>
<div> %% Set controlling process for UDP or SCTP socket.</div><div> udp_controlling_process(S, NewOwner) when is_port(S), is_pid(NewOwner) -></div><div>     case erlang:port_info(S, connected) of</div><div>+       {connected, NewOwner}-></div>
<div>+            ok;</div><div>        {connected, Pid} when Pid =/= self() -></div><div>            {error, not_owner};</div><div>        _ -></div><div><br></div><br><div class="gmail_quote">On Wed, Apr 27, 2011 at 7:36 PM, Tony Rogvall <span dir="ltr"><<a href="mailto:tony@rogvall.se">tony@rogvall.se</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word">Nice ! ;-)<div><br></div><div>Same problem with gen_tcp ! </div><div>You can use inet:i() to verify that even Erlang knows about the problem :-)</div>
<div><br></div><div>I see the problem.  inet:udp/tcp_controlling_process unlinks from the socket without </div><div>checking that it is already the controlling process, effectively creating a zombie port.</div><div><br></div>
<div>Work around: Do not change the controlling process to it self.</div><div><br></div><div>/Tony</div><div><br></div><div><div><div></div><div class="h5"><br><div><div>On 27 apr 2011, at 19.05, Max Lapshin wrote:</div><br>
<blockquote type="cite"><div>Open UDP port<br><br>$ erl<br>Erlang R14B02 (erts-5.8.3) [source] [64-bit] [smp:4:4] [rq:4]<br>[async-threads:0] [hipe] [kernel-poll:false]<br><br>Eshell V5.8.3  (abort with ^G)<br>1> {ok,Port} = gen_udp:open(9000, [binary]).<br>
{ok,#Port<0.576>}<br><br>$ lsof -nP -i|grep beam|grep UDP<br>beam.smp  10912  max   11u  IPv4 0x089073c4      0t0  UDP *:9000<br><br><br><br>Simulate error:<br>2> a=b.<br>** exception error: no match of right hand side value b<br>
<br>All ports are closed.<br><br>$ lsof -nP -i|grep beam|grep UDP<br>$<br><br><br>Now add controlling_process:<br><br>4> {ok,Port} = gen_udp:open(9000, [binary]).<br>{ok,#Port<0.587>}<br>5> gen_udp:controlling_process(Port, self()).<br>
ok<br>6> a=b.<br>** exception error: no match of right hand side value b<br><br>Voila: port is not closed<br><br>lsof -nP -i|grep beam|grep UDP<br>beam.smp  10912  max   11u  IPv4 0x089073c4      0t0  UDP *:9000<br><br>
<br>Where is it? To which process belongs it now and when will it be closed?<br>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br></div></blockquote></div><br></div></div><div>
<span style="border-collapse:separate;color:rgb(0, 0, 0);font-family:Helvetica;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="border-collapse:separate;color:rgb(0, 0, 0);font-family:Helvetica;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div style="word-wrap:break-word">
<span style="font-family:Verdana, Arial, Tahoma;font-size:12px"><i>"Have run Make so many times I dunno what's installed anymore"</i></span></div></span></span>
</div>
<br></div></div><br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Best Regards,<br>- Ahmed Omar<div><a href="http://nl.linkedin.com/in/adiaa" target="_blank">http://nl.linkedin.com/in/adiaa</a></div><div>Follow me on twitter</div><div>
<a href="http://twitter.com/#!/spawn_think" target="_blank">@spawn_think</a></div><br>
</div>