Skip to content

Commit

Permalink
Enable usage of experimental inet_backend option for TCP listeners
Browse files Browse the repository at this point in the history
  • Loading branch information
Maria-12648430 committed Nov 5, 2020
1 parent 3e914c4 commit 35416e6
Show file tree
Hide file tree
Showing 6 changed files with 198 additions and 72 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ DOC_DEPS = asciideck

TEST_DEPS = $(if $(CI_ERLANG_MK),ci.erlang.mk) ct_helper stampede
dep_ct_helper = git https://github.com/ninenines/ct_helper master
dep_stampede = git https://github.com/juhlig/stampede 0.5.0
dep_stampede = git https://github.com/juhlig/stampede 0.6.0

# Concuerror tests.

Expand Down
7 changes: 1 addition & 6 deletions src/ranch_acceptors_sup.erl
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,7 @@ start_listen_sockets(Ref, NumListenSockets, Transport, TransOpts0, Logger) when
[];
{_, Port} ->
SocketOpts = maps:get(socket_opts, TransOpts0, []),
SocketOpts1 = case lists:keyfind(port, 1, SocketOpts) of
{port, Port} ->
SocketOpts;
_ ->
[{port, Port}|lists:keydelete(port, 1, SocketOpts)]
end,
SocketOpts1 = lists:keystore(port, 1, SocketOpts, {port, Port}),
TransOpts1 = TransOpts0#{socket_opts => SocketOpts1},
[{N, start_listen_socket(Ref, Transport, TransOpts1, Logger)}
|| N <- lists:seq(2, NumListenSockets)]
Expand Down
20 changes: 14 additions & 6 deletions src/ranch_tcp.erl
Original file line number Diff line number Diff line change
Expand Up @@ -90,16 +90,24 @@ messages() -> {tcp, tcp_closed, tcp_error, tcp_passive}.
listen(TransOpts) ->
ok = cleanup(TransOpts),
Logger = maps:get(logger, TransOpts, logger),
SocketOpts0 = maps:get(socket_opts, TransOpts, []),
SocketOpts = maps:get(socket_opts, TransOpts, []),
%% 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.
gen_tcp:listen(0, prepare_socket_opts(SocketOpts, Logger)).

prepare_socket_opts([Backend = {inet_backend, _}|SocketOpts], Logger) ->
%% In OTP/23, the inet_backend option may be used to activate the
%% experimental socket backend for inet/gen_tcp. If present, it must
%% be the first option in the list.
[Backend|prepare_socket_opts(SocketOpts, Logger)];
prepare_socket_opts(SocketOpts0, Logger) ->
SocketOpts1 = ranch:set_option_default(SocketOpts0, backlog, 1024),
SocketOpts2 = ranch:set_option_default(SocketOpts1, nodelay, true),
SocketOpts3 = ranch:set_option_default(SocketOpts2, send_timeout, 30000),
SocketOpts4 = ranch:set_option_default(SocketOpts3, send_timeout_close, true),
%% 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.
gen_tcp:listen(0, ranch:filter_options(SocketOpts4, disallowed_listen_options(),
[binary, {active, false}, {packet, raw}, {reuseaddr, true}], Logger)).
ranch:filter_options(SocketOpts4, disallowed_listen_options(),
[binary, {active, false}, {packet, raw}, {reuseaddr, true}], Logger).

%% 'binary' and 'list' are disallowed but they are handled
%% specifically as they do not have 2-tuple equivalents.
Expand Down
Loading

0 comments on commit 35416e6

Please sign in to comment.