Skip to content

Commit 016055d

Browse files
committed
Harden socket_dist.erl
Signed-off-by: Peter M <petermm@gmail.com>
1 parent dac10ce commit 016055d

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

libs/estdlib/src/socket_dist.erl

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,28 @@ do_listen(Name, SocketPort) ->
6565
{ok, LSock} = socket:open(inet, stream, tcp),
6666
case socket:bind(LSock, #{family => inet, port => SocketPort, addr => {0, 0, 0, 0}}) of
6767
ok ->
68-
ok = socket:listen(LSock),
69-
{ok, #{addr := Addr, port := Port}} = socket:sockname(LSock),
70-
ErlEpmd = net_kernel:epmd_module(),
71-
Address = #net_address{
72-
host = Addr,
73-
protocol = tcp,
74-
family = inet
75-
},
76-
case ErlEpmd:register_node(Name, Port) of
77-
{ok, Creation} ->
78-
{ok, {LSock, Address, Creation}};
79-
Error ->
68+
case socket:listen(LSock) of
69+
ok ->
70+
case socket:sockname(LSock) of
71+
{ok, #{addr := Addr, port := Port}} ->
72+
ErlEpmd = net_kernel:epmd_module(),
73+
Address = #net_address{
74+
host = Addr,
75+
protocol = tcp,
76+
family = inet
77+
},
78+
case ErlEpmd:register_node(Name, Port) of
79+
{ok, Creation} ->
80+
{ok, {LSock, Address, Creation}};
81+
Error ->
82+
socket:close(LSock),
83+
Error
84+
end;
85+
{error, _} = Error ->
86+
socket:close(LSock),
87+
Error
88+
end;
89+
{error, _} = Error ->
8090
socket:close(LSock),
8191
Error
8292
end;

0 commit comments

Comments
 (0)