aboutsummaryrefslogtreecommitdiff
path: root/portal/tcp
diff options
context:
space:
mode:
authorClombrong <cromblong@egregore.fun>2025-06-28 01:06:32 +0200
committerClombrong <cromblong@egregore.fun>2025-06-28 07:39:19 +0200
commitd5725c16b8e92b4d0ba5edc9edc25c273a9ccf29 (patch)
tree588dbe91ba8783a219d38ee7aad5e8f0ceacd4d3 /portal/tcp
parente61005002c67f513eb7bfcc8c0fae4b37dce5cae (diff)
fix(portal_tcp): reading from the socket handles errors
Diffstat (limited to 'portal/tcp')
-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))