diff options
author | juhlig <[email protected]> | 2019-05-27 15:20:37 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2019-05-27 16:03:29 +0200 |
commit | 30604262b5934b38e9f55f0d3ef44f8aed5310de (patch) | |
tree | 5a88a20152197921b266769684c17651afc44882 /src/ranch_acceptors_sup.erl | |
parent | ad82f58139ca88b7e82dcb6bd50063c899b685e9 (diff) | |
download | ranch-30604262b5934b38e9f55f0d3ef44f8aed5310de.tar.gz ranch-30604262b5934b38e9f55f0d3ef44f8aed5310de.tar.bz2 ranch-30604262b5934b38e9f55f0d3ef44f8aed5310de.zip |
Use transport options in ranch_transport:listen/1 callbacks
The callback `ranch_transport:listen/1` has changed to accept a map
of transport options instead of socket options.
Diffstat (limited to 'src/ranch_acceptors_sup.erl')
-rw-r--r-- | src/ranch_acceptors_sup.erl | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/ranch_acceptors_sup.erl b/src/ranch_acceptors_sup.erl index c062645..a1bb8c2 100644 --- a/src/ranch_acceptors_sup.erl +++ b/src/ranch_acceptors_sup.erl @@ -27,14 +27,11 @@ init([Ref, NumAcceptors, Transport]) -> TransOpts = ranch_server:get_transport_options(Ref), Logger = maps:get(logger, TransOpts, logger), NumListenSockets = maps:get(num_listen_sockets, TransOpts, 1), - SocketOpts = maps:get(socket_opts, TransOpts, []), %% We temporarily put the logger in the process dictionary %% so that it can be used from ranch:filter_options. The %% interface as it currently is does not allow passing it %% down otherwise. - put(logger, Logger), - LSockets = start_listen_sockets(Ref, NumListenSockets, Transport, SocketOpts, Logger), - erase(logger), + LSockets = start_listen_sockets(Ref, NumListenSockets, Transport, TransOpts, Logger), Procs = [begin LSocketId = (AcceptorId rem NumListenSockets) + 1, {_, LSocket} = lists:keyfind(LSocketId, 1, LSockets), @@ -46,46 +43,50 @@ init([Ref, NumAcceptors, Transport]) -> end || AcceptorId <- lists:seq(1, NumAcceptors)], {ok, {#{}, Procs}}. --spec start_listen_sockets(any(), pos_integer(), module(), list(), module()) +-spec start_listen_sockets(any(), pos_integer(), module(), map(), module()) -> [{pos_integer(), inet:socket()}]. -start_listen_sockets(Ref, NumListenSockets, Transport, SocketOpts0, Logger) when NumListenSockets > 0 -> - BaseSocket = start_listen_socket(Ref, Transport, SocketOpts0, Logger), +start_listen_sockets(Ref, NumListenSockets, Transport, TransOpts0, Logger) when NumListenSockets > 0 -> + BaseSocket = start_listen_socket(Ref, Transport, TransOpts0, Logger), {ok, Addr} = Transport:sockname(BaseSocket), ExtraSockets = case Addr of {local, _} when NumListenSockets > 1 -> - listen_error(Ref, Transport, SocketOpts0, reuseport_local, Logger); + listen_error(Ref, Transport, TransOpts0, reuseport_local, Logger); {local, _} -> []; {_, Port} -> - SocketOpts = case lists:keyfind(port, 1, SocketOpts0) of + SocketOpts = maps:get(socket_opts, TransOpts0, []), + SocketOpts1 = case lists:keyfind(port, 1, SocketOpts) of {port, Port} -> - SocketOpts0; + SocketOpts; _ -> - [{port, Port}|lists:keydelete(port, 1, SocketOpts0)] + [{port, Port}|lists:keydelete(port, 1, SocketOpts)] end, - [{N, start_listen_socket(Ref, Transport, SocketOpts, Logger)} + TransOpts1 = TransOpts0#{socket_opts => SocketOpts1}, + [{N, start_listen_socket(Ref, Transport, TransOpts1, Logger)} || N <- lists:seq(2, NumListenSockets)] end, ranch_server:set_addr(Ref, Addr), [{1, BaseSocket}|ExtraSockets]. --spec start_listen_socket(any(), module(), list(), module()) -> inet:socket(). -start_listen_socket(Ref, Transport, SocketOpts, Logger) -> - case Transport:listen(SocketOpts) of +-spec start_listen_socket(any(), module(), map(), module()) -> inet:socket(). +start_listen_socket(Ref, Transport, TransOpts, Logger) -> + case Transport:listen(TransOpts) of {ok, Socket} -> Socket; {error, Reason} -> - listen_error(Ref, Transport, SocketOpts, Reason, Logger) + listen_error(Ref, Transport, TransOpts, Reason, Logger) end. -spec listen_error(any(), module(), any(), atom(), module()) -> no_return(). -listen_error(Ref, Transport, SocketOpts0, Reason, Logger) -> +listen_error(Ref, Transport, TransOpts0, Reason, Logger) -> + SocketOpts0 = maps:get(socket_opts, TransOpts0, []), SocketOpts1 = [{cert, '...'}|proplists:delete(cert, SocketOpts0)], SocketOpts2 = [{key, '...'}|proplists:delete(key, SocketOpts1)], SocketOpts = [{cacerts, '...'}|proplists:delete(cacerts, SocketOpts2)], + TransOpts = TransOpts0#{socket_opts => SocketOpts}, ranch:log(error, "Failed to start Ranch listener ~p in ~p:listen(~999999p) for reason ~p (~s)~n", - [Ref, Transport, SocketOpts, Reason, format_error(Reason)], Logger), + [Ref, Transport, TransOpts, Reason, format_error(Reason)], Logger), exit({listen_error, Ref, Reason}). format_error(no_cert) -> |