diff options
author | Linus Nordberg <linus@sunet.se> | 2020-01-07 10:53:50 +0100 |
---|---|---|
committer | Linus Nordberg <linus@sunet.se> | 2020-01-07 23:09:09 +0100 |
commit | 6a3dd773452351c95b552c479d1bcaf276b2cc62 (patch) | |
tree | 7e5f06744f324bff7d2812701fce525aeb1b545f | |
parent | ae6fc8623e35eae56aad02d9a1f922199a59ad36 (diff) |
Servers don't need to know socket path
-rw-r--r-- | p11p-daemon/src/p11p_server.erl | 21 | ||||
-rw-r--r-- | p11p-daemon/src/p11p_server_sup.erl | 5 |
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([]) -> |