From f876da55a40b3597fadd95679facd20bdf20dd2f Mon Sep 17 00:00:00 2001 From: Ilya Averyanov Date: Wed, 23 Jul 2025 13:12:05 +0300 Subject: [PATCH] fix: respect connect timeout in ssl:connect --- src/hackney_ssl.erl | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/hackney_ssl.erl b/src/hackney_ssl.erl index c1296637..5735a375 100644 --- a/src/hackney_ssl.erl +++ b/src/hackney_ssl.erl @@ -130,9 +130,16 @@ connect(Host, Port, Opts0, Timeout) when is_list(Host), is_integer(Port), SSLOpts = proplists:get_value(ssl_options, Opts0), BaseOpts = [binary, {active, false}, {packet, raw}], Opts1 = hackney_util:merge_opts(BaseOpts, proplists:delete(ssl_options, Opts0)), + Now = erlang:monotonic_time(millisecond), case hackney_happy:connect(Host, Port, Opts1, Timeout) of {ok, Sock} -> - ssl:connect(Sock, SSLOpts); + Elapsed = erlang:monotonic_time(millisecond) - Now, + case Timeout - Elapsed of + TimeoutLeft when TimeoutLeft > 0 -> + ssl:connect(Sock, SSLOpts, TimeoutLeft); + _ -> + {error, timeout} + end; Error -> Error end.