diff options
author | Linus Nordberg <linus@sunet.se> | 2019-06-24 16:04:53 +0200 |
---|---|---|
committer | Linus Nordberg <linus@sunet.se> | 2019-06-24 16:04:53 +0200 |
commit | 5ce12907073082be03c25707e2d6fc0703db9f1f (patch) | |
tree | f4990c0d09688d06b68fb947c1e9148b38ae1735 /p11p-daemon/src/p11p_server_sup.erl | |
parent | 6e90bceab4a3a6e4b9d4496b810324867d533ce1 (diff) |
start one sock_server per token; give servers a chance to clean up
still not rm'ing the socket file though. wonder where that should happen.
Diffstat (limited to 'p11p-daemon/src/p11p_server_sup.erl')
-rw-r--r-- | p11p-daemon/src/p11p_server_sup.erl | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/p11p-daemon/src/p11p_server_sup.erl b/p11p-daemon/src/p11p_server_sup.erl index 924123b..18f1247 100644 --- a/p11p-daemon/src/p11p_server_sup.erl +++ b/p11p-daemon/src/p11p_server_sup.erl @@ -1,28 +1,34 @@ -module(p11p_server_sup). -behaviour(supervisor). --export([start_link/0, start_server/0]). +-export([start_link/0, start_server/1]). -export([init/1]). start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). init([]) -> - Name = "vtoken0", % FIXME - SocketPath = socket_path(mkdir_socket_basepath(), Name), - file:delete(SocketPath), - % TODO: consider flow control through {active, once} - {ok, ListenSocket} = gen_tcp:listen(0, [{ifaddr, {local, SocketPath}}, - binary]), - spawn_link(fun start_server/0), - {ok, {{simple_one_for_one, 60, 3600}, - [{sock_server, - {p11p_server, start_link, [ListenSocket]}, + Names = ["vtoken0", "vtoken1"], % FIXME: get from config + ok = start_servers(Names), + {ok, {{simple_one_for_one, 1, 5}, + [{sock_server, % Ignored childspec id. + {p11p_server, start_link, []}, temporary, 1000, worker, [p11p_server]} ]}}. -start_server() -> - supervisor:start_child(?MODULE, []). +start_servers([]) -> + ok; +start_servers([Name|T]) -> + Path = socket_path(mkdir_socket_basepath(), Name), + file:delete(Path), + % TODO: consider flow control through {active, once}, don't forget activating after read! + {ok, Socket} = gen_tcp:listen(0, [{ifaddr, {local, Path}}, binary]), + spawn_link(?MODULE, start_server, [[Path, Socket]]), + start_servers(T). + +start_server(Args) -> + {ok, Pid} = supervisor:start_child(?MODULE, [Args]), + Pid. %% Private functions. mkdir_socket_basepath() -> |