diff options
Diffstat (limited to 'portal/tcp')
-rw-r--r-- | portal/tcp/portal.ml | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/portal/tcp/portal.ml b/portal/tcp/portal.ml index 3b969fc..28ef8a6 100644 --- a/portal/tcp/portal.ml +++ b/portal/tcp/portal.ml @@ -76,7 +76,13 @@ let socket_to_stream (sock : socket) = let raw_stream = let buffer = Bytes.create 4096 in Lwt_stream.from (fun () -> - let* len = Lwt_unix.read sock buffer 0 4096 + let* len = + try%lwt Lwt_unix.read sock buffer 0 4096 + with + | Unix.Unix_error (Unix.ECONNRESET, _, _) + | Unix.Unix_error (Unix.EPIPE, _, _) + | End_of_file -> Lwt.return 0 + | exn -> Lwt.fail exn in match len with | 0 -> Lwt.return_none | len -> Lwt.return_some (Bytes.sub_string buffer 0 len)) |