Lorsqu'une erreur se produit alors qu'une partie a déjà été écrite, on perd cette information. Pour y remédier, on peut utiliser une exception Partial_write et retourner à la fois l'erreur et le nombre exact d'octets écrits (lorsque celui-ci est non nul, sinon on reporte l'erreur comme d'habitude).
      
exception Partial_write of exn * int
let mon_write desc buf offset len =
  let rec write offset left =
    if left > 0 then
      let n =
        begin try single_write desc buf offset left with
        | Unix_error (___as exn when left < len ->
            raise (Partial_write (exnlen -left))
        end in
      write (offset + n) (left -n)
    else len in
  write offset len;;