From 02ff6533bbbc5dae95959c4979765d532d9e0af6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Fri, 6 Mar 2015 18:47:33 +0100 Subject: Handle Transport:controlling_socket/2 errors and close the socket --- src/ranch_conns_sup.erl | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'src/ranch_conns_sup.erl') 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(), -- cgit v1.2.3