aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2014-05-23 11:38:54 +0200
committerHolger Weiss <holger@zedat.fu-berlin.de>2014-05-23 11:38:54 +0200
commitab9667f9178548fcb6d68f1028cdfc2e727cac8a (patch)
tree9a1c2d2961806a05a1637b4ed8e9a7393f8fd78b /src
parentMerge branch 'weiss-check-packet-type' into 3 (diff)
XEP-0198: Don't exit on socket send failure
If stream management is enabled, don't exit the c2s process when ejabberd_socket:send/2 fails, but close the socket instead. This gives the client a chance to resume the session. Thanks go to Matthias Rieber for reporting the issue, providing detailed logs, and testing the fix.
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_c2s.erl8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 5d0cc9c08..1076eb895 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -1811,6 +1811,14 @@ send_text(StateData, Text) when StateData#state.xml_socket ->
?DEBUG("Send Text on stream = ~p", [Text]),
(StateData#state.sockmod):send_xml(StateData#state.socket,
{xmlstreamraw, Text});
+send_text(StateData, Text) when StateData#state.mgmt_state == active ->
+ ?DEBUG("Send XML on stream = ~p", [Text]),
+ case catch (StateData#state.sockmod):send(StateData#state.socket, Text) of
+ {'EXIT', _} ->
+ (StateData#state.sockmod):close(StateData#state.socket);
+ _ ->
+ ok
+ end;
send_text(StateData, Text) ->
?DEBUG("Send XML on stream = ~p", [Text]),
(StateData#state.sockmod):send(StateData#state.socket, Text).