Packages
hackney
4.0.3
4.7.2
4.7.1
4.7.0
4.6.1
4.6.0
4.5.2
4.5.1
4.5.0
4.4.5
4.4.3
4.4.2
4.4.1
4.4.0
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.3
4.0.2
4.0.1
4.0.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
retired
2.0.1
2.0.0
2.0.0-beta.1
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.0
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.0
1.13.0
1.12.1
1.12.0
1.11.0
1.10.1
1.10.0
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.0
1.7.1
1.7.0
1.6.6
retired
1.6.5
1.6.4
retired
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.6
1.0.5
1.0.2
1.0.1
0.15.2
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
Simple HTTP client with HTTP/1.1, HTTP/2, and HTTP/3 support
Current section
Files
Jump to
Current section
Files
src/hackney_conn_sup.erl
%%% -*- erlang -*-
%%%
%%% This file is part of hackney released under the Apache 2 license.
%%% See the NOTICE for more information.
%%%
%%% Copyright (c) 2024 Benoit Chesneau
%%%
%%% @doc Supervisor for hackney_conn connection processes.
%%%
%%% This is a simple_one_for_one supervisor that dynamically starts
%%% hackney_conn gen_statem processes for each connection.
-module(hackney_conn_sup).
-behaviour(supervisor).
%% API
-export([start_link/0]).
-export([start_conn/1]).
-export([stop_conn/1]).
-export([stop_all/0]).
%% Supervisor callbacks
-export([init/1]).
-define(SERVER, ?MODULE).
%%====================================================================
%% API functions
%%====================================================================
%% @doc Start the supervisor.
-spec start_link() -> {ok, pid()} | {error, term()}.
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
%% @doc Start a new connection process.
%% Opts is a map with at least host, port, and transport.
-spec start_conn(map()) -> {ok, pid()} | {error, term()}.
start_conn(Opts) ->
supervisor:start_child(?SERVER, [Opts]).
%% @doc Stop a connection process gracefully.
-spec stop_conn(pid()) -> ok.
stop_conn(Pid) ->
hackney_conn:stop(Pid).
%% @doc Stop all connection processes gracefully.
%% Useful for test cleanup.
-spec stop_all() -> ok.
stop_all() ->
try
Children = supervisor:which_children(?SERVER),
lists:foreach(fun({_, Pid, _, _}) when is_pid(Pid) ->
try
hackney_conn:stop(Pid)
catch
_:_ -> ok
end;
(_) -> ok
end, Children),
ok
catch
exit:{noproc, _} -> ok;
_:_ -> ok
end.
%%====================================================================
%% Supervisor callbacks
%%====================================================================
init([]) ->
SupFlags = #{
strategy => simple_one_for_one,
intensity => 10,
period => 10
},
ChildSpec = #{
id => hackney_conn,
start => {hackney_conn, start_link, []},
restart => temporary,
shutdown => 5000,
type => worker,
modules => [hackney_conn]
},
{ok, {SupFlags, [ChildSpec]}}.