aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--portal/tcp/portal.ml8
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))