Skip to content

Commit ab9667f

Browse files
committed
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.
1 parent 6baf3a2 commit ab9667f

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

src/ejabberd_c2s.erl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1811,6 +1811,14 @@ send_text(StateData, Text) when StateData#state.xml_socket ->
18111811
?DEBUG("Send Text on stream = ~p", [Text]),
18121812
(StateData#state.sockmod):send_xml(StateData#state.socket,
18131813
{xmlstreamraw, Text});
1814+
send_text(StateData, Text) when StateData#state.mgmt_state == active ->
1815+
?DEBUG("Send XML on stream = ~p", [Text]),
1816+
case catch (StateData#state.sockmod):send(StateData#state.socket, Text) of
1817+
{'EXIT', _} ->
1818+
(StateData#state.sockmod):close(StateData#state.socket);
1819+
_ ->
1820+
ok
1821+
end;
18141822
send_text(StateData, Text) ->
18151823
?DEBUG("Send XML on stream = ~p", [Text]),
18161824
(StateData#state.sockmod):send(StateData#state.socket, Text).

0 commit comments

Comments
 (0)