I am still a little concerned this will not work (at least if using the unixsupport.c ocaml machinery).

Say EPROTONOSUPPORT is undefined.  ZMQ maps it to it's own error code.  In OCaml in unixsupport.c the error code is dealt with as follows;

```
#ifndef EPROTONOSUPPORT
#define EPROTONOSUPPORT (-1)
#endif
```

When unix_error is called (with what?) it looks up the error code in `error_table` but there will be no corresponding code there with which to map to the Unix_error constructor.

We could add a separate unix_error_constr raising function that took the constructor number directly, but it would then be very important to ensure that the mapping to these constructors was kept up to date with OCaml.  I dont know if this is really very likely to change or not.