ejabberd_listener: Log error when cannot set definitive unix socket (#4422)

This commit is contained in:
Badlop
2025-07-22 10:06:15 +02:00
parent b1c3baa7bd
commit 99b75396ad
+18 -9
View File
@@ -113,11 +113,12 @@ init({Port, _, udp} = EndPoint, Module, Opts, SockOpts) ->
{Port, SockOpts}
end,
ExtraOpts2 = lists:keydelete(send_timeout, 1, ExtraOpts),
case gen_udp:open(Port2, [binary,
case {gen_udp:open(Port2, [binary,
{active, false},
{reuseaddr, true} |
ExtraOpts2]) of
{ok, Socket} ->
ExtraOpts2]),
set_definitive_udsocket(Port, Opts)} of
{{ok, Socket}, ok} ->
set_definitive_udsocket(Port, Opts),
misc:set_proc_label({?MODULE, udp, Port}),
case inet:sockname(Socket) of
@@ -143,14 +144,17 @@ init({Port, _, udp} = EndPoint, Module, Opts, SockOpts) ->
report_socket_error(Reason, EndPoint, Module),
proc_lib:init_ack(Err)
end;
{error, Reason} = Err ->
{{error, Reason}, _} = Err ->
report_socket_error(Reason, EndPoint, Module),
proc_lib:init_ack(Err);
{_, {error, Reason}} = Err ->
report_socket_error(Reason, EndPoint, Module),
proc_lib:init_ack(Err)
end;
init({Port, _, tcp} = EndPoint, Module, Opts, SockOpts) ->
case listen_tcp(Port, SockOpts) of
{ok, ListenSocket} ->
set_definitive_udsocket(Port, Opts),
case {listen_tcp(Port, SockOpts),
set_definitive_udsocket(Port, Opts)} of
{{ok, ListenSocket}, ok} ->
case inet:sockname(ListenSocket) of
{ok, {Addr, Port1}} ->
proc_lib:init_ack({ok, self()}),
@@ -178,7 +182,10 @@ init({Port, _, tcp} = EndPoint, Module, Opts, SockOpts) ->
report_socket_error(Reason, EndPoint, Module),
proc_lib:init_ack(Err)
end;
{error, Reason} = Err ->
{{error, Reason}, _} = Err ->
report_socket_error(Reason, EndPoint, Module),
proc_lib:init_ack(Err);
{_, {error, Reason}} = Err ->
report_socket_error(Reason, EndPoint, Module),
proc_lib:init_ack(Err)
end.
@@ -216,7 +223,7 @@ listen_tcp(Port, SockOpts) ->
setup_provisional_udsocket_dir(DefinitivePath) ->
ProvisionalPath = get_provisional_udsocket_path(DefinitivePath),
?DEBUG("Creating a Unix Domain Socket provisional file at ~ts for the definitive path ~s",
?INFO_MSG("Creating a Unix Domain Socket provisional file at ~ts for the definitive path ~s",
[ProvisionalPath, DefinitivePath]),
ProvisionalPath.
@@ -233,6 +240,8 @@ get_definitive_udsocket_path(ProvisionalPath) ->
{term, Path} = misc:base64_to_term(PathBase64),
relative_socket_to_mnesia(Path).
-spec set_definitive_udsocket(binary(), opts()) -> ok | {error, file:posix() | badarg}.
set_definitive_udsocket(<<"unix:", Path/binary>>, Opts) ->
Prov = get_provisional_udsocket_path(Path),
Usd = maps:get(unix_socket, Opts),