aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_socket.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_socket.erl')
-rw-r--r--src/ejabberd_socket.erl28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/ejabberd_socket.erl b/src/ejabberd_socket.erl
index f94a0a0e1..389b3a106 100644
--- a/src/ejabberd_socket.erl
+++ b/src/ejabberd_socket.erl
@@ -65,19 +65,27 @@ start(Module, SockMod, Socket, Opts) ->
SocketData = #socket_state{sockmod = SockMod,
socket = Socket,
receiver = Receiver},
- {ok, Pid} = Module:start({?MODULE, SocketData}, Opts),
- case SockMod:controlling_process(Socket, Receiver) of
- ok ->
- ok;
+ case Module:start({?MODULE, SocketData}, Opts) of
+ {ok, Pid} ->
+ case SockMod:controlling_process(Socket, Receiver) of
+ ok ->
+ ok;
+ {error, _Reason} ->
+ SockMod:close(Socket)
+ end,
+ ejabberd_receiver:become_controller(Receiver, Pid);
{error, _Reason} ->
SockMod:close(Socket)
- end,
- ejabberd_receiver:become_controller(Receiver, Pid);
+ end;
raw ->
- {ok, Pid} = Module:start({SockMod, Socket}, Opts),
- case SockMod:controlling_process(Socket, Pid) of
- ok ->
- ok;
+ case Module:start({SockMod, Socket}, Opts) of
+ {ok, Pid} ->
+ case SockMod:controlling_process(Socket, Pid) of
+ ok ->
+ ok;
+ {error, _Reason} ->
+ SockMod:close(Socket)
+ end;
{error, _Reason} ->
SockMod:close(Socket)
end