aboutsummaryrefslogtreecommitdiff
path: root/portal/tcp
diff options
context:
space:
mode:
Diffstat (limited to 'portal/tcp')
-rw-r--r--portal/tcp/portal.ml11
1 files changed, 10 insertions, 1 deletions
diff --git a/portal/tcp/portal.ml b/portal/tcp/portal.ml
index 31c45c0..c767f3e 100644
--- a/portal/tcp/portal.ml
+++ b/portal/tcp/portal.ml
@@ -123,8 +123,17 @@ let socket_to_stream (sock : socket) =
in
let outbound_stream, outbound_push = Lwt_stream.create () in
let push = function
- | None -> outbound_push None
| Some signals -> Markup.iter (fun f -> outbound_push (Some f)) signals
+ | None -> begin
+ (* XMPP streams are one long XML document, so naturally ending the document
+ closes the stream. *)
+ outbound_push (Some `End_element);
+ Lwt.async
+ (fun () ->
+ (* We drain completely the stream when closing, so the socket can close. *)
+ let+ () = Markup_lwt.drain stream
+ in outbound_push None)
+ end
in Lwt.async begin
fun () ->
let* _ =