]> granicus.if.org Git - ejabberd/commitdiff
XEP-0198: Don't exit on socket send failure
authorHolger Weiss <holger@zedat.fu-berlin.de>
Fri, 23 May 2014 09:38:54 +0000 (11:38 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Fri, 23 May 2014 09:38:54 +0000 (11:38 +0200)
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.

src/ejabberd_c2s.erl

index 5d0cc9c08825e571915b0f388de8f45af17b6a3d..1076eb895a67ad8343bf50eeacf98878ead15a56 100644 (file)
@@ -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).