错误处理¶
在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.