<div dir="ltr">Hi!<br>Before calling inet:sockname on a port first make sure it's inet_tcp or inet_udp.<div>For example,</div><div>[{inet:sockname(P), erlang:port_info(P, connected)} || P <- erlang:ports(), erlang:port_get_data(P) == inet_tcp].<br></div><div><br></div><div>You also can filter by name from erlang:port_info/1:<br>[{inet:sockname(P), erlang:port_info(P, connected)} || P <- erlang:ports(), erlang:port_info(P, name) == {name,"tcp_inet"}].<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 16, 2017 at 3:14 PM, Attila Rajmund Nohl <span dir="ltr"><<a href="mailto:attila.r.nohl@gmail.com" target="_blank">attila.r.nohl@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<br>
I have a oneliner that prints out which erlang process is listening on<br>
a given TCP port. Recently I upgraded from Debian 8.9 to Debian 9.2<br>
and on Erlang/OTP 19.3.1 this oneliner no longer works. The minimal<br>
example to reproduce:<br>
<br>
Erlang/OTP 19 [erts-8.3.1] [source] [64-bit] [smp:2:2]<br>
[async-threads:10] [hipe] [kernel-poll:false]<br>
<br>
Eshell V8.3.1  (abort with ^G)<br>
1> inet:sockname(self()).<br>
** exception error: no function clause matching prim_inet:sockname(<0.58.0>)<br>
2> inet:sockname(hd(erlang:ports(<wbr>))).<br>
Failed to write to erl_child_setup: 9<br>
<br>
Crash dump is being written to: erl_crash.dump...done<br>
<br>
The (relevant?) part of the crash dump:<br>
<br>
Current Process: <0.60.0><br>
Current Process State: Running<br>
Current Process Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL |<br>
PRQ_PRIO_NORMAL | ACTIVE | RUNNING | ON_HEAP_MSGQ<br>
Current Process Program counter: 0x00007f695af4b1d0 (unknown function)<br>
Current Process CP: 0x0000000000000000 (invalid)<br>
Current Process Limited Stack Trace:<br>
0x00007f6958e16048:SReturn addr 0x5C473830 (prim_inet:ctl_cmd/3 + 64)<br>
0x00007f6958e16070:SReturn addr 0x5C45F3F8 (prim_inet:sockname/1 + 96)<br>
0x00007f6958e16080:SReturn addr 0x5C291510 (erl_eval:do_apply/6 + 408)<br>
0x00007f6958e16088:SReturn addr 0x580DF1B0 (shell:exprs/7 + 632)<br>
0x00007f6958e160a0:SReturn addr 0x580DE8D0 (shell:eval_exprs/7 + 128)<br>
0x00007f6958e160f8:SReturn addr 0x580DE4C8 (shell:eval_loop/3 + 576)<br>
0x00007f6958e16130:SReturn addr 0x943E78 (<terminate process normally>)<br>
<br>
Erlang is built from source using kerl. This used to work on Debian<br>
8.9 (as far as I remember, but I may be wrong here) and this also<br>
works (at least doesn't crash the VM) on Erlang 18.3:<br>
<br>
3> inet:sockname(hd(erlang:ports(<wbr>))).<br>
** exception error: no try clause matching []<br>
     in function  prim_inet:ctl_cmd/3<br>
     in call from prim_inet:sockname/1<br>
<br>
Sometimes my terminal hangs when I reproduce this bug. I just checked<br>
and I got similar crash on OS X too with Erlang/OTP 19.3.<br>
______________________________<wbr>_________________<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" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><font face="'courier new', monospace">Danil Zagoskin | <a href="mailto:z@gosk.in" target="_blank">z@gosk.in</a></font></div></div></div>
</div>