summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nordberg <linus@sunet.se>2020-01-07 10:53:50 +0100
committerLinus Nordberg <linus@sunet.se>2020-01-07 23:09:09 +0100
commit6a3dd773452351c95b552c479d1bcaf276b2cc62 (patch)
tree7e5f06744f324bff7d2812701fce525aeb1b545f
parentae6fc8623e35eae56aad02d9a1f922199a59ad36 (diff)
Servers don't need to know socket path
-rw-r--r--p11p-daemon/src/p11p_server.erl21
-rw-r--r--p11p-daemon/src/p11p_server_sup.erl5
2 files changed, 14 insertions, 12 deletions
diff --git a/p11p-daemon/src/p11p_server.erl b/p11p-daemon/src/p11p_server.erl
index 5b37952..668a51c 100644
--- a/p11p-daemon/src/p11p_server.erl
+++ b/p11p-daemon/src/p11p_server.erl
@@ -21,7 +21,6 @@
-record(state, {
tokname :: string(),
remote :: pid() | undefined,
- sockpath :: string(),
socket :: gen_tcp:socket(),
msg :: p11rpc_msg() | undefined,
clientbuf = <<>> :: binary()
@@ -41,11 +40,11 @@ reply(Pid, Response) ->
gen_server:call(Pid, {response, Response}).
%% Genserver callbacks.
-init([Token, SocketPath, Socket]) ->
- lager:debug("~p: p11p_server:init: ~s", [self(), SocketPath]),
+init([Token, Socket]) ->
+ lager:debug("~p: p11p_server:init", [self()]),
process_flag(trap_exit, true), % We want terminate().
gen_server:cast(self(), accept), % Perform accept in gen-server loop.
- {ok, #state{tokname = Token, sockpath = SocketPath, socket = Socket}}.
+ {ok, #state{tokname = Token, socket = Socket}}.
handle_call({add_to_clientbuf, Data}, _From, #state{clientbuf = Buf} = State) ->
NewBuf = <<Buf/binary, Data/binary>>,
@@ -60,16 +59,18 @@ handle_call(Call, _From, State) ->
lager:debug("~p: Unhandled call: ~p~n", [self(), Call]),
{reply, unhandled, State}.
-handle_cast(accept, State = #state{tokname = TokName, sockpath = SocketPath, socket = ListenSocket}) ->
- %% Blocking until client connects or timeout fires. Without a
- %% timeout our supervisor cannot terminate us.
+handle_cast(accept, State = #state{tokname = TokName, socket = ListenSocket}) ->
+ %% Blocking until client connects or timeout fires.
+ %% Without a timeout our supervisor cannot terminate us.
+ %% On timeout, just invoke ourselves again.
case gen_tcp:accept(ListenSocket, 900) of
{ok, Sock} ->
lager:debug("~p: ~p: new connection accepted", [self(), Sock]),
- p11p_server_sup:start_server([TokName, SocketPath, ListenSocket]), % Start a new acceptor.
- {noreply, State#state{socket = Sock}}; % Use the new socket.
+ %% Start a new acceptor and return with new socket in state.
+ p11p_server_sup:start_server([TokName, ListenSocket]),
+ {noreply, State#state{socket = Sock}};
{error, timeout} ->
- gen_server:cast(self(), accept), % Try again.
+ gen_server:cast(self(), accept),
{noreply, State};
{error, closed} ->
lager:debug("~p: listening socket closed", [self()]),
diff --git a/p11p-daemon/src/p11p_server_sup.erl b/p11p-daemon/src/p11p_server_sup.erl
index 3e6a764..263d183 100644
--- a/p11p-daemon/src/p11p_server_sup.erl
+++ b/p11p-daemon/src/p11p_server_sup.erl
@@ -31,9 +31,10 @@ start_servers([]) ->
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!
+ %% TODO: Consider flow control using {active, once}.
+ %% And if so, don't forget activating after read.
{ok, Socket} = gen_tcp:listen(0, [{ifaddr, {local, Path}}, binary]),
- spawn_link(?MODULE, start_server, [[Name, Path, Socket]]),
+ spawn_link(?MODULE, start_server, [[Name, Socket]]),
start_servers(T).
cleanup([]) ->