From 395490ea791cad34fd9130feb37eb145b16c1dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 21 Nov 2022 13:19:12 +0100 Subject: Enable send timeouts by default When no TCP options are provided, Gun will enable send timeouts at 15s. The value was chosen large enough to be safe while still allowing Gun to detect send errors eventually. Different applications may need to tweak and lower this value. --- doc/src/manual/gun.asciidoc | 4 +++- src/gun.erl | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/src/manual/gun.asciidoc b/doc/src/manual/gun.asciidoc index d130d62..9ad3e8e 100644 --- a/doc/src/manual/gun.asciidoc +++ b/doc/src/manual/gun.asciidoc @@ -354,9 +354,11 @@ supervise (true):: Whether the Gun process should be started under the `gun_sup` supervisor. Set to `false` to use your own supervisor. -tcp_opts ([]):: +tcp_opts (DefaultOpts):: TCP options used when establishing the connection. +By default Gun enables send timeouts with the options +`[{send_timeout, 15000}, {send_timeout_close, true}]`. tls_handshake_timeout (infinity):: diff --git a/src/gun.erl b/src/gun.erl index bd19b7c..880a2ae 100644 --- a/src/gun.erl +++ b/src/gun.erl @@ -1022,7 +1022,10 @@ default_retry_fun(Retries, Opts) -> domain_lookup(_, {retries, Retries, _}, State=#state{host=Host, port=Port, opts=Opts, event_handler=EvHandler, event_handler_state=EvHandlerState0}) -> - TransOpts = maps:get(tcp_opts, Opts, []), + TransOpts = maps:get(tcp_opts, Opts, [ + {send_timeout, 15000}, + {send_timeout_close, true} + ]), DomainLookupTimeout = maps:get(domain_lookup_timeout, Opts, infinity), DomainLookupEvent = #{ host => Host, -- cgit v1.2.3