Luv.Error
Error handling.
See Error handling in the user guide and Error handling in libuv.
type t = [
| `E2BIG
| `EACCES
| `EADDRINUSE
| `EADDRNOTAVAIL
| `EAFNOSUPPORT
| `EAGAIN
| `EAI_ADDRFAMILY
| `EAI_AGAIN
| `EAI_BADFLAGS
| `EAI_BADHINTS
| `EAI_CANCELED
| `EAI_FAIL
| `EAI_FAMILY
| `EAI_MEMORY
| `EAI_NODATA
| `EAI_NONAME
| `EAI_OVERFLOW
| `EAI_PROTOCOL
| `EAI_SERVICE
| `EAI_SOCKTYPE
| `EALREADY
| `EBADF
| `EBUSY
| `ECANCELED
| `ECONNABORTED
| `ECONNREFUSED
| `ECONNRESET
| `EDESTADDRREQ
| `EEXIST
| `EFAULT
| `EFBIG
| `EFTYPE
| `EHOSTUNREACH
| `EILSEQ
| `EINTR
| `EINVAL
| `EIO
| `EISCONN
| `EISDIR
| `ELOOP
| `EMFILE
| `EMLINK
| `EMSGSIZE
| `ENAMETOOLONG
| `ENETDOWN
| `ENETUNREACH
| `ENFILE
| `ENOBUFS
| `ENODATA
| `ENODEV
| `ENOENT
| `ENOMEM
| `ENONET
| `ENOPROTOOPT
| `ENOSPC
| `ENOSYS
| `ENOTCONN
| `ENOTDIR
| `ENOTEMPTY
| `ENOTSOCK
| `ENOTSUP
| `ENOTTY
| `ENXIO
| `EOF
| `EOVERFLOW
| `EPERM
| `EPIPE
| `EPROTO
| `EPROTONOSUPPORT
| `EPROTOTYPE
| `ERANGE
| `EROFS
| `ESHUTDOWN
| `ESOCKTNOSUPPORT
| `ESPIPE
| `ESRCH
| `ETIMEDOUT
| `ETXTBSY
| `EUNATCH
| `EXDEV
| `UNKNOWN
]
Error codes returned by libuv functions.
Binds libuv error codes, which resemble Unix error codes.
`EFTYPE
is available since Luv 0.5.5 and libuv 1.21.0.
`EILSEQ
is available since libuv 1.32.0.
`ENODATA
is available since Luv 0.5.13 and libuv 1.45.0.
`ENOTTY
is available since Luv 0.5.5 and libuv 1.16.0.
`EOVERFLOW
and `ESOCKTNOSUPPORT
are available since Luv 0.5.9 and libuv 1.42.0.
`EUNATCH
is available since Luv 0.5.13 and libuv 1.46.0.
Luv.Require.(has eftype)
Luv.Require.(has eilseq)
Luv.Require.(has enotty)
Luv.Require.(has enodata)
Luv.Require.(has eoverflow)
Luv.Require.(has esocktnosupport)
Luv.Require.(has eunatch)
val strerror : t -> string
Returns the error message corresponding to the given error code.
Binds uv_strerror_r
.
If you are using libuv 1.21.0 or earlier, Luv.Error.strerror `UNKNOWN
slowly leaks memory.
val err_name : t -> string
Returns the name of the given error code.
Binds uv_err_name_r
.
If you are using libuv 1.21.0 or earlier, Luv.Error.err_name `UNKNOWN
slowly leaks memory.
val translate_sys_error : int -> t
Converts a system error code to a libuv error code.
Binds uv_translate_sys_error
.
Requires libuv 1.10.0.
Feature check: Luv.Require.(has translate_sys_error)
If user code terminates a callback by raising an exception, the exception cannot be allowed to go up the call stack, because the callback was called by libuv (rather than OCaml code), and the exception would disrupt libuv book-keeping. Luv instead passes the exception to a global Luv exception handler. Luv.Error.set_on_unhandled_exception f
replaces this exception handler with f
.
For example, in
Luv.Error.set_on_unhandled_exception f;
Luv.File.mkdir "foo" (fun _ -> raise Exit);
the exception Exit
is passed to f
when mkdir
calls its callback.
It is recommended to avoid letting exceptions escape from callbacks in this way.
The default behavior, if Luv.Error.set_on_unhandled_exception
is never called, is for Luv to print the exception to STDERR and exit the process with exit code 2.
It is recommended not to call Luv.Error.set_on_unhandled_exception
from libraries based on Luv, but, instead, to leave the decision on how to handle exceptions up to the final application.