summaryrefslogtreecommitdiff
path: root/p11p-daemon/src/p11p_server_sup.erl
diff options
context:
space:
mode:
authorLinus Nordberg <linus@sunet.se>2019-06-24 16:04:53 +0200
committerLinus Nordberg <linus@sunet.se>2019-06-24 16:04:53 +0200
commit5ce12907073082be03c25707e2d6fc0703db9f1f (patch)
treef4990c0d09688d06b68fb947c1e9148b38ae1735 /p11p-daemon/src/p11p_server_sup.erl
parent6e90bceab4a3a6e4b9d4496b810324867d533ce1 (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.erl32
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() ->