aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_http2.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2017-05-05 13:48:25 +0200
committerLoïc Hoguin <[email protected]>2017-05-05 13:48:25 +0200
commit7db724f04a0a8468424960790d8414aa374b249e (patch)
treec0f728b7752c7c9111d1f0999f5b2c3e2d0d86f1 /src/cowboy_http2.erl
parent6100470c900d395e8000114df12e7f03e09d6183 (diff)
downloadcowboy-7db724f04a0a8468424960790d8414aa374b249e.tar.gz
cowboy-7db724f04a0a8468424960790d8414aa374b249e.tar.bz2
cowboy-7db724f04a0a8468424960790d8414aa374b249e.zip
Add inactivity_timeout and other options improvements
Diffstat (limited to 'src/cowboy_http2.erl')
-rw-r--r--src/cowboy_http2.erl19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/cowboy_http2.erl b/src/cowboy_http2.erl
index a280c5f..e6e8a8b 100644
--- a/src/cowboy_http2.erl
+++ b/src/cowboy_http2.erl
@@ -22,6 +22,17 @@
-export([system_terminate/4]).
-export([system_code_change/4]).
+-type opts() :: #{
+ connection_type => worker | supervisor,
+ env => cowboy_middleware:env(),
+ inactivity_timeout => timeout(),
+ middlewares => [module()],
+ preface_timeout => timeout(),
+ shutdown_timeout => timeout(),
+ stream_handlers => [module()]
+}.
+-export_type([opts/0]).
+
-record(stream, {
id = undefined :: cowboy_stream:streamid(),
%% Stream handlers and their state.
@@ -41,7 +52,7 @@
ref :: ranch:ref(),
socket = undefined :: inet:socket(),
transport :: module(),
- opts = #{} :: map(),
+ opts = #{} :: opts(),
%% Remote address and port for the connection.
peer = undefined :: {inet:ip_address(), inet:port_number()},
@@ -151,9 +162,10 @@ before_loop(State, Buffer) ->
loop(State, Buffer).
loop(State=#state{parent=Parent, socket=Socket, transport=Transport,
- children=Children, parse_state=PS}, Buffer) ->
+ opts=Opts, children=Children, parse_state=PS}, Buffer) ->
Transport:setopts(Socket, [{active, once}]),
{OK, Closed, Error} = Transport:messages(),
+ InactivityTimeout = maps:get(inactivity_timeout, Opts, 300000),
receive
%% Socket messages.
{OK, Socket, Data} ->
@@ -198,8 +210,7 @@ loop(State=#state{parent=Parent, socket=Socket, transport=Transport,
Msg ->
error_logger:error_msg("Received stray message ~p.", [Msg]),
loop(State, Buffer)
- %% @todo Configurable timeout.
- after 60000 ->
+ after InactivityTimeout ->
terminate(State, {internal_error, timeout, 'No message or data received before timeout.'})
end.