We are concerned about this enum, which much be kept in sync with the OCaml unix library implementation and is thus version-dependent. We think there's a better way.
We could make a file `ZMQ_error.ml` with a function `map_exn: error_code -> exn`, where type `error_code` is like the old `ZMQ.error`, and `map_exn` will return either a `ZMQ.ZMQ_exception` or a `Unix.Unix_error`, depending on whether the error code is ZMQ-specific or not. The C code would then call `map_exn` to find out which exception to raise. The error parameter to `ZMQ.ZMQ_exception` should just have 5 cases like what's in this PR now.
Does this make sense?