From fc510c07a1e9879f176824cf91fab1a8ba1ec4c5 Mon Sep 17 00:00:00 2001 From: Hans Svensson Date: Tue, 17 Apr 2018 09:00:22 +0200 Subject: [PATCH] Handle errors in start_link (tcp_closed) --- src/enoise.erl | 6 ++++-- src/enoise_connection.erl | 16 ++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/enoise.erl b/src/enoise.erl index ad85251..0df59f3 100644 --- a/src/enoise.erl +++ b/src/enoise.erl @@ -237,8 +237,10 @@ tcp_handshake(TcpSock, Role, Options) -> case handshake(Options, Role, ComState) of {ok, #{ rx := Rx, tx := Tx, final_state := FState }, #{ state := {_, _, Buf} }} -> - {ok, Pid} = enoise_connection:start_link(TcpSock, Rx, Tx, self(), {Active, Buf}), - {ok, #enoise{ pid = Pid }, FState}; + case enoise_connection:start_link(TcpSock, Rx, Tx, self(), {Active, Buf}) of + {ok, Pid} -> {ok, #enoise{ pid = Pid }, FState}; + Err = {error, _} -> Err + end; Err = {error, _} -> Err end; diff --git a/src/enoise_connection.erl b/src/enoise_connection.erl index a540a9f..e98a7ec 100644 --- a/src/enoise_connection.erl +++ b/src/enoise_connection.erl @@ -37,12 +37,16 @@ start_link(TcpSock, Rx, Tx, Owner, {Active0, Buf}) -> tcp_sock = TcpSock, active = Active }, case gen_server:start_link(?MODULE, [State], []) of {ok, Pid} -> - ok = gen_tcp:controlling_process(TcpSock, Pid), - %% Changing controlling process require a bit of - %% fiddling with already received and delivered content... - [ Pid ! {tcp, TcpSock, Buf} || Buf /= <<>> ], - flush_tcp(Pid, TcpSock), - {ok, Pid}; + case gen_tcp:controlling_process(TcpSock, Pid) of + ok -> + %% Changing controlling process require a bit of + %% fiddling with already received and delivered content... + [ Pid ! {tcp, TcpSock, Buf} || Buf /= <<>> ], + flush_tcp(Pid, TcpSock), + {ok, Pid}; + Err = {error, _} -> + Err + end; Err = {error, _} -> Err end.