ejabberd_listener: Log error when cannot set definitive unix socket (#4422)
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user