错误处理

在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

没有这样的设备或地址

太多的链接

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.