diff --git a/lwt-unix/gluten_lwt_unix.ml b/lwt-unix/gluten_lwt_unix.ml index 79f20b1..6f7c35b 100644 --- a/lwt-unix/gluten_lwt_unix.ml +++ b/lwt-unix/gluten_lwt_unix.ml @@ -42,11 +42,18 @@ module Io : match Lwt_unix.state socket with | Closed -> Lwt.return_unit | _ -> - Lwt.catch + Lwt.finalize (fun () -> - Lwt_unix.shutdown socket SHUTDOWN_ALL; + Lwt.catch + (fun () -> + Lwt_unix.shutdown socket SHUTDOWN_ALL; + Lwt.return_unit) + (function + | Unix.Unix_error (Unix.ENOTCONN, _, _) -> Lwt.return_unit + | exn -> Lwt.reraise exn)) + (fun () -> Lwt_unix.close socket) - (fun _exn -> Lwt.return_unit) + let read socket bigstring ~off ~len = Lwt.catch