aboutsummaryrefslogtreecommitdiffstats
path: root/src/ranch_ssl.erl
diff options
context:
space:
mode:
authorjuhlig <[email protected]>2020-04-20 17:03:17 +0200
committerjuhlig <[email protected]>2020-04-20 17:03:17 +0200
commit9765f305e1f55f758a683bd95665fd0ab84a52c3 (patch)
treea45cf397516b3e59f7a8065e7f76bba46a64e3d7 /src/ranch_ssl.erl
parent821937cea1a9afacd2dc2448440ad6f64d3a29f1 (diff)
downloadranch-9765f305e1f55f758a683bd95665fd0ab84a52c3.tar.gz
ranch-9765f305e1f55f758a683bd95665fd0ab84a52c3.tar.bz2
ranch-9765f305e1f55f758a683bd95665fd0ab84a52c3.zip
Delete local socket file when a listener closes
Diffstat (limited to 'src/ranch_ssl.erl')
-rw-r--r--src/ranch_ssl.erl23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/ranch_ssl.erl b/src/ranch_ssl.erl
index cc51012..2c35c97 100644
--- a/src/ranch_ssl.erl
+++ b/src/ranch_ssl.erl
@@ -43,6 +43,7 @@
-export([sockname/1]).
-export([shutdown/2]).
-export([close/1]).
+-export([cleanup/1]).
-type ssl_opt() :: {alpn_preferred_protocols, [binary()]}
| {beast_mitigation, one_n_minus_one | zero_n | disabled}
@@ -107,6 +108,7 @@ messages() -> {ssl, ssl_closed, ssl_error, ssl_passive}.
-spec listen(ranch:transport_opts(opts())) -> {ok, ssl:sslsocket()} | {error, atom()}.
listen(TransOpts) ->
+ ok = cleanup(TransOpts),
SocketOpts = maps:get(socket_opts, TransOpts, []),
case lists:keymember(cert, 1, SocketOpts)
orelse lists:keymember(certfile, 1, SocketOpts)
@@ -124,15 +126,6 @@ do_listen(SocketOpts0, Logger) ->
SocketOpts2 = ranch:set_option_default(SocketOpts1, nodelay, true),
SocketOpts3 = ranch:set_option_default(SocketOpts2, send_timeout, 30000),
SocketOpts = ranch:set_option_default(SocketOpts3, send_timeout_close, true),
- %% In case of a local socket, we remove the socket file first.
- %% It is possible to have multiple ip tuples in the socket options,
- %% and the last one will be used (undocumented).
- _ = case lists:keyfind(ip, 1, lists:reverse(SocketOpts0)) of
- {ip, {local, SockFile}} ->
- file:delete(SockFile);
- _ ->
- ok
- end,
%% We set the port to 0 because it is given in the Opts directly.
%% The port in the options takes precedence over the one in the
%% first argument.
@@ -287,3 +280,15 @@ shutdown(Socket, How) ->
-spec close(ssl:sslsocket()) -> ok.
close(Socket) ->
ssl:close(Socket).
+
+-spec cleanup(ranch:transport_opts(opts())) -> ok.
+cleanup(#{socket_opts:=SocketOpts}) ->
+ case lists:keyfind(ip, 1, lists:reverse(SocketOpts)) of
+ {ip, {local, SockFile}} ->
+ _ = file:delete(SockFile),
+ ok;
+ _ ->
+ ok
+ end;
+cleanup(_) ->
+ ok.