aboutsummaryrefslogtreecommitdiffstats
path: root/src/ranch_conns_sup.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ranch_conns_sup.erl')
-rw-r--r--src/ranch_conns_sup.erl28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/ranch_conns_sup.erl b/src/ranch_conns_sup.erl
index d287c02..e6b6382 100644
--- a/src/ranch_conns_sup.erl
+++ b/src/ranch_conns_sup.erl
@@ -114,17 +114,23 @@ loop(State=#state{parent=Parent, ref=Ref, conn_type=ConnType,
{?MODULE, start_protocol, To, Socket} ->
case Protocol:start_link(Ref, Socket, Transport, Opts) of
{ok, Pid} ->
- Transport:controlling_process(Socket, Pid),
- Pid ! {shoot, Ref, Transport, Socket, AckTimeout},
- put(Pid, true),
- CurConns2 = CurConns + 1,
- if CurConns2 < MaxConns ->
- To ! self(),
- loop(State, CurConns2, NbChildren + 1,
- Sleepers);
- true ->
- loop(State, CurConns2, NbChildren + 1,
- [To|Sleepers])
+ case Transport:controlling_process(Socket, Pid) of
+ ok ->
+ Pid ! {shoot, Ref, Transport, Socket, AckTimeout},
+ put(Pid, true),
+ CurConns2 = CurConns + 1,
+ if CurConns2 < MaxConns ->
+ To ! self(),
+ loop(State, CurConns2, NbChildren + 1,
+ Sleepers);
+ true ->
+ loop(State, CurConns2, NbChildren + 1,
+ [To|Sleepers])
+ end;
+ {error, _} ->
+ Transport:close(Socket),
+ exit(Pid, kill),
+ loop(State, CurConns, NbChildren, Sleepers)
end;
Ret ->
To ! self(),