mte/unikernel/duniverse/faraday/lwt/faraday_lwt.ml

26 lines
654 B
OCaml
Raw Normal View History

2025-11-11 02:07:51 +01:00
open Lwt
let serialize t ~yield ~writev =
let shutdown () =
Faraday.close t;
(* It's necessary to drain the serializer in order to free any buffers that
* may be be queued up. *)
ignore (Faraday.drain t);
in
let rec loop t =
match Faraday.operation t with
| `Writev iovecs ->
writev iovecs
>>= (function
| `Closed -> shutdown (); return () (* XXX(seliopou): this should be reported *)
| `Ok n -> Faraday.shift t n; loop t)
| `Yield ->
yield t >>= fun () -> loop t
| `Close -> return ()
in
catch
(fun () -> loop t)
(fun exn ->
shutdown ();
fail exn)