diff --git a/src/cowboy_http.erl b/src/cowboy_http.erl index f1eabf10..f32cb10e 100644 --- a/src/cowboy_http.erl +++ b/src/cowboy_http.erl @@ -1603,6 +1603,8 @@ terminate_all_streams(State, [#stream{id=StreamID, state=StreamState}|Tail], Rea terminate_linger(State=#state{socket=Socket, transport=Transport, opts=Opts}) -> case Transport:shutdown(Socket, write) of ok -> + %% Release the socket on process exit. See erlang/otp#9529. + _ = Transport:setopts(Socket, [{linger, {true, 0}}]), case maps:get(linger_timeout, Opts, 1000) of 0 -> ok; diff --git a/src/cowboy_http2.erl b/src/cowboy_http2.erl index 831f205e..5f669bd6 100644 --- a/src/cowboy_http2.erl +++ b/src/cowboy_http2.erl @@ -1293,6 +1293,8 @@ terminate_all_streams(State, [{StreamID, #stream{state=StreamState}}|Tail], Reas terminate_linger(State=#state{socket=Socket, transport=Transport, opts=Opts}) -> case Transport:shutdown(Socket, write) of ok -> + %% Release the socket on process exit. See erlang/otp#9529. + _ = Transport:setopts(Socket, [{linger, {true, 0}}]), case maps:get(linger_timeout, Opts, 1000) of 0 -> ok;