20 lines
542 B
OCaml
20 lines
542 B
OCaml
include Faraday_lwt
|
|
|
|
open Lwt.Infix
|
|
|
|
let writev_of_fd fd =
|
|
fun iovecs ->
|
|
let lwt_iovecs = Lwt_unix.IO_vectors.create () in
|
|
iovecs |> List.iter (fun {Faraday.buffer; off; len} ->
|
|
Lwt_unix.IO_vectors.append_bigarray lwt_iovecs buffer off len);
|
|
|
|
Lwt.catch
|
|
(fun () ->
|
|
Lwt_unix.writev fd lwt_iovecs
|
|
>|= fun n -> `Ok n)
|
|
(function
|
|
| Unix.Unix_error (Unix.EBADF, "check_descriptor", _)
|
|
| Unix.Unix_error (Unix.EPIPE, _, _) ->
|
|
Lwt.return `Closed
|
|
| exn ->
|
|
Lwt.fail exn)
|