diff --git a/zmq-deferred/src/socket.ml b/zmq-deferred/src/socket.ml index 0d34713..6e5de5c 100644 --- a/zmq-deferred/src/socket.ml +++ b/zmq-deferred/src/socket.ml @@ -141,6 +141,9 @@ module Make(T: Deferred.T) = struct event_loop t | exception Unix.Unix_error(Unix.ENOTSOCK, "zmq_getsockopt", "") -> Deferred.return () + | exception Unix.Unix_error(Unix.EINTR, "zmq_getsockopt", "") -> + Format.eprintf "DEBUG: ZMQ-lwt: Got EINTR in event-loop - retrying..\n%!"; + event_loop t end let of_socket: ('a Zmq.Socket.t -> 'a t) of_socket_args = fun socket -> @@ -163,9 +166,12 @@ module Make(T: Deferred.T) = struct let f' mailbox () = let res = match f t.socket with | v -> Ok v - | exception Unix.Unix_error (Unix.EAGAIN, _, _) -> + | exception Unix.Unix_error (Unix.EAGAIN, _, _) -> (* Signal try again *) raise Retry + | exception Unix.Unix_error (Unix.EINTR, "zmq_msg_recv", _) -> + Format.eprintf "DEBUG: ZMQ-lwt: Got EINTR from 'zmq_msg_recv' - retrying..\n%!"; + raise Retry | exception exn -> Error exn in Mailbox.send mailbox res