0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

Add the idle_timeout HTTP/1.1 protocol option

This fixes the connection being dropped because of request_timeout
despite there being some active streams.
This commit is contained in:
Loïc Hoguin 2017-05-03 17:44:00 +02:00
parent 73b4eb94ff
commit 95d2855f62
No known key found for this signature in database
GPG key ID: 71366FF21851DF03
4 changed files with 57 additions and 35 deletions

View file

@ -1,8 +1,9 @@
%% This module implements a loop handler that sends
%% itself a timeout that will intentionally arrive
%% too late, as it configures itself to only wait
%% 200ms before closing the connection in init/2.
%% This results in a 204 reply being sent back by Cowboy.
%% after the HTTP/1.1 request_timeout. The protocol
%% is not supposed to close the connection when a
%% request is ongoing, and therefore this handler
%% will eventually send a 200 reply.
-module(loop_handler_timeout_h).
@ -11,11 +12,11 @@
-export([terminate/3]).
init(Req, _) ->
erlang:send_after(1000, self(), timeout),
{cowboy_loop, Req, undefined, hibernate}.
erlang:send_after(6000, self(), timeout),
{cowboy_loop, Req, #{hibernate => true}}.
info(timeout, Req, State) ->
{stop, cowboy_req:reply(500, Req), State}.
{stop, cowboy_req:reply(200, #{}, <<"Good!">>, Req), State}.
terminate(timeout, _, _) ->
terminate(stop, _, _) ->
ok.