diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ranch.erl | 5 | ||||
-rw-r--r-- | src/ranch_acceptors_sup.erl | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/ranch.erl b/src/ranch.erl index a83402d..f36c145 100644 --- a/src/ranch.erl +++ b/src/ranch.erl @@ -58,11 +58,12 @@ -type transport_opts(SocketOpts) :: #{ connection_type => worker | supervisor, handshake_timeout => timeout(), - max_connections => max_conns(), logger => module(), + max_connections => max_conns(), num_acceptors => pos_integer(), num_conns_sups => pos_integer(), num_listen_sockets => pos_integer(), + post_listen_callback => fun((term()) -> ok | {error, term()}), shutdown => timeout() | brutal_kill, socket_opts => SocketOpts }. @@ -131,6 +132,8 @@ validate_transport_opt(num_conns_sups, Value, _) -> validate_transport_opt(num_listen_sockets, Value, Opts) -> is_integer(Value) andalso Value > 0 andalso Value =< maps:get(num_acceptors, Opts, 10); +validate_transport_opt(post_listen_callback, Value, _) -> + is_function(Value, 1); validate_transport_opt(shutdown, brutal_kill, _) -> true; validate_transport_opt(shutdown, infinity, _) -> diff --git a/src/ranch_acceptors_sup.erl b/src/ranch_acceptors_sup.erl index 801fec5..76155b8 100644 --- a/src/ranch_acceptors_sup.erl +++ b/src/ranch_acceptors_sup.erl @@ -77,7 +77,13 @@ start_listen_sockets(Ref, NumListenSockets, Transport, TransOpts0, Logger) when start_listen_socket(Ref, Transport, TransOpts, Logger) -> case Transport:listen(TransOpts) of {ok, Socket} -> - Socket; + PostListenCb = maps:get(post_listen_callback, TransOpts, fun (_) -> ok end), + case PostListenCb(Socket) of + ok -> + Socket; + {error, Reason} -> + listen_error(Ref, Transport, TransOpts, Reason, Logger) + end; {error, Reason} -> listen_error(Ref, Transport, TransOpts, Reason, Logger) end. |