From 0f8e8797e88db8cc2f4f2f3f17058656d26e5cf4 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 6 May 2025 11:01:54 -0400 Subject: [PATCH] add Nanoev_picos.Net with send/recv functions --- src/picos/nanoev_picos.ml | 1 + src/picos/nanoev_picos.mli | 1 + src/picos/net.ml | 11 +++++++++++ src/posix/nanoev_posix.ml | 18 +++++++++++++++--- 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 src/picos/net.ml diff --git a/src/picos/nanoev_picos.ml b/src/picos/nanoev_picos.ml index 7f20853..2b390cb 100644 --- a/src/picos/nanoev_picos.ml +++ b/src/picos/nanoev_picos.ml @@ -4,5 +4,6 @@ include Base module Global_ev = Global_ev module IO_in = IO_in module IO_out = IO_out +module Net = Net module Net_client = Net_client module Net_server = Net_server diff --git a/src/picos/nanoev_picos.mli b/src/picos/nanoev_picos.mli index a8723dc..ec18490 100644 --- a/src/picos/nanoev_picos.mli +++ b/src/picos/nanoev_picos.mli @@ -15,5 +15,6 @@ end module IO_in = IO_in module IO_out = IO_out +module Net = Net module Net_client = Net_client module Net_server = Net_server diff --git a/src/picos/net.ml b/src/picos/net.ml new file mode 100644 index 0000000..ad24abf --- /dev/null +++ b/src/picos/net.ml @@ -0,0 +1,11 @@ +let[@inline] send sock buf i len ~flags : int = + Base.Raw.retry_write sock (fun () -> Unix.send sock buf i len flags) + +let[@inline] sendto sock ~addr ~flags buf i len : int = + Base.Raw.retry_write sock (fun () -> Unix.sendto sock buf i len flags addr) + +let[@inline] recv sock buf i len ~flags : int = + Base.Raw.retry_read sock (fun () -> Unix.recv sock buf i len flags) + +let[@inline] recvfrom sock buf i len ~flags : int * Unix.sockaddr = + Base.Raw.retry_read sock (fun () -> Unix.recvfrom sock buf i len flags) diff --git a/src/posix/nanoev_posix.ml b/src/posix/nanoev_posix.ml index 2e9a5ca..ebca1e0 100644 --- a/src/posix/nanoev_posix.ml +++ b/src/posix/nanoev_posix.ml @@ -159,7 +159,12 @@ let wakeup_from_outside (self : st) : unit = let rec perform_cbs ~closed = function | Nil -> () | Sub (x, y, f, tail) -> - f ~closed x y; + (try f ~closed x y + with exn -> + let bt = Printexc.get_raw_backtrace () in + Printf.eprintf "nanoev-posix: uncaught error %s\n%s%!" + (Printexc.to_string exn) + (Printexc.raw_backtrace_to_string bt)); perform_cbs ~closed tail (** Change the event loop right now. This must be called only from the owner @@ -320,8 +325,15 @@ let step (self : st) : unit = let (Timer t) = Heap.peek_min_exn self.timer in if t.deadline <= now then ( ignore (Heap.pop_min_exn self.timer : timer_ev); - t.f t.x t.y; - true + try + t.f t.x t.y; + true + with exn -> + let bt = Printexc.get_raw_backtrace () in + Printf.eprintf "nanoev-posix: uncaught error %s in timer\n%s%!" + (Printexc.to_string exn) + (Printexc.raw_backtrace_to_string bt); + false ) else false )