错误处理¶
在libuv中,错误是负数常量。 根据经验, 不管何时有一个状态参数,或是一个API函数返回一个整数的时候, 一个负数意味着一个错误。
当一个使用回调函数的函数返回了一个错误, 这个回调函数将永远不会被调用。
注解
实现的细节:在 Unix 中错误代码是负的 errno (或者说 -errno),当在 Windows 上它们由libuv定义为任意的负数。
错误常量¶
-
UV_E2BIG¶ 参数列表太长了
-
UV_EACCES¶ 权限被拒绝
-
UV_EADDRINUSE¶ 地址已经被使用
-
UV_EADDRNOTAVAIL¶ 地址不可用
-
UV_EAFNOSUPPORT¶ 不支持的地址族
-
UV_EAGAIN¶ 资源临时不可用
-
UV_EAI_ADDRFAMILY¶ 不支持的地址族
-
UV_EAI_AGAIN¶ 临时性失败
-
UV_EAI_BADFLAGS¶ 错的 ai_flags 值
-
UV_EAI_BADHINTS¶ 无效的指示值
-
UV_EAI_CANCELED¶ 请求取消了
-
UV_EAI_FAIL¶ 永久性失败
-
UV_EAI_FAMILY¶ ai_family 不支持
-
UV_EAI_MEMORY¶ 内存用完
-
UV_EAI_NODATA¶ 没有地址
-
UV_EAI_NONAME¶ 未知的代码或服务
-
UV_EAI_OVERFLOW¶ 参数缓存越界
-
UV_EAI_PROTOCOL¶ 解析的协议未知
-
UV_EAI_SERVICE¶ 对套接字类型,服务不可用
-
UV_EAI_SOCKTYPE¶ 套接字类型不支持
-
UV_EALREADY¶ 连接已经在进行中
-
UV_EBADF¶ 错的文件描述符
-
UV_EBUSY¶ 资源忙或是锁定了
-
UV_ECANCELED¶ 操作取消了
-
UV_ECHARSET¶ 非法的 Unicode 字符
-
UV_ECONNABORTED¶ 软件导致的连接中止
-
UV_ECONNREFUSED¶ 连接被拒绝
-
UV_ECONNRESET¶ 连接被远端重置
-
UV_EDESTADDRREQ¶ 需要目的地址
-
UV_EEXIST¶ 文件已经存在
-
UV_EFAULT¶ 在系统调用参数里有错的地址
-
UV_EFBIG¶ 文件太大了
-
UV_EHOSTUNREACH¶ 主机不可达
-
UV_EINTR¶ 中断的系统调用
-
UV_EINVAL¶ 非法参数
-
UV_EIO¶ I/O 错误
-
UV_EISCONN¶ 套接字已连接
-
UV_EISDIR¶ 在目录上的非法操作
-
UV_ELOOP¶ 遇到了太多符号链接
-
UV_EMFILE¶ 打开的文件太多了
-
UV_EMSGSIZE¶ 消息太长了
-
UV_ENAMETOOLONG¶ 名字太长了
-
UV_ENETDOWN¶ 网络停机
-
UV_ENETUNREACH¶ 网络不可达
-
UV_ENFILE¶ 文件表溢出
-
UV_ENOBUFS¶ 没有可用的缓存空间
-
UV_ENODEV¶ 没有这样的设备
-
UV_ENOENT¶ 没哟这样的文件或目录
-
UV_ENOMEM¶ 内存不够
-
UV_ENONET¶ 机器不在网络上
-
UV_ENOPROTOOPT¶ 协议不可用
-
UV_ENOSPC¶ 设备上没有剩余空间
-
UV_ENOSYS¶ 未被实现的函数
-
UV_ENOTCONN¶ 套接字未连接
-
UV_ENOTDIR¶ 不是一个目录
-
UV_ENOTEMPTY¶ 目录非空
-
UV_ENOTSOCK¶ 在非套接字上进行套接字操作
-
UV_ENOTSUP¶ 套接字不支持的操作
-
UV_EPERM¶ 不允许的操作
-
UV_EPIPE¶ 破碎的管道
-
UV_EPROTO¶ 协议错误
-
UV_EPROTONOSUPPORT¶ 协议不支持
-
UV_EPROTOTYPE¶ 对套接字的错误的协议类型
-
UV_ERANGE¶ 结果太大了
-
UV_EROFS¶ 只读的文件系统
-
UV_ESHUTDOWN¶ 不能在传输终点关机后发送
-
UV_ESPIPE¶ 非法查寻
-
UV_ESRCH¶ 没有这样的进程
-
UV_ETIMEDOUT¶ 连接超时
-
UV_ETXTBSY¶ 文本文件忙
-
UV_EXDEV¶ 不允许跨设备链接
-
UV_UNKNOWN¶ 未知错误
-
UV_EOF¶ 文件结尾
-
UV_ENXIO¶ 没有这样的设备或地址
-
UV_EMLINK¶ 太多的链接
API¶
-
UV_ERRNO_MAP(iter_macro)¶ 对以上每个错误常量扩展出一系列的 iter_macro 调用的宏。 iter_macro 以两个参数调用:不带 UV_ 前缀的错误常量名, 和错误信息字符串字面量。
-
const char*
uv_strerror(int err)¶ 返回对应给定错误代码的错误信息。 泄漏一些字节的内存,当你以未知的错误代码调用它时。
-
char*
uv_strerror_r(int err, char* buf, size_t buflen)¶ 返回对应给定错误代码的错误信息。 以零结尾的信息存储在用户提供的缓冲区 buf 里,不超过 buflen 字节。
1.22.0 新版功能.
-
const char*
uv_err_name(int err)¶ 返回对应给定错误代码的错误名。 泄漏一些字节的内存,当你以未知的错误代码调用它时。
-
char*
uv_err_name_r(int err, char* buf, size_t buflen)¶ 返回对应给定错误代码的错误名。 以零结尾的名称存储在用户提供的缓冲区 buf 里,不超过 buflen 字节。
1.22.0 新版功能.
-
int
uv_translate_sys_error(int sys_errno)¶ 返回等同于给定平台相关错误代码的libuv错误代码: POSIX 错误代码在 Unix 上(存储于 errno ), 和Win32错误代码在Windows上( GetLastError() 或 WSAGetLastError() 返回的)。
如果 sys_errno 已经是一个libuv错误,则直接返回。
在 1.10.0 版更改: function declared public.