在哪里可以找到所有类型的 bsd 样式套接字错误的列表?
Net Citizen
问问题
1244 次
4 回答
6
在文档中?例如,对于 connect(),请参见:
% man connect
...
ECONNREFUSED
No-one listening on the remote address.
EISCONN
The socket is already connected.
ENETUNREACH
Network is unreachable.
于 2008-10-05T16:53:48.467 回答
2
您还可以在 Open Group 的页面上找到每个功能(例如connect)的错误代码列表(及其含义的一般描述)。
于 2008-10-05T16:25:41.830 回答
1
如果您想知道所有可能的 errno 或对它们的一些评论,您可以查看头文件,在 Linux 系统上位于
- /usr/include/asm-generic/errno-base.h
#ifndef _ASM_GENERIC_ERRNO_BASE_H #define _ASM_GENERIC_ERRNO_BASE_H #define EPERM 1 /* 不允许操作 */ #define ENOENT 2 /* 没有这样的文件或目录 */ #define ESRCH 3 /* 没有这样的进程 */ #define EINTR 4 /* 中断的系统调用 */ #define EIO 5 /* I/O 错误 */ #define ENXIO 6 /* 没有这样的设备或地址 */ #define E2BIG 7 /* 参数列表太长 */ #define ENOEXEC 8 /* 执行格式错误 */ #define EBADF 9 /* 错误的文件号 */ #define ECHILD 10 /* 没有子进程 */ #define EAGAIN 11 /* 再试一次 */ ...
- /usr/include/asm-generic/errno.h
#ifndef _ASM_GENERIC_ERRNO_H #define _ASM_GENERIC_ERRNO_H #包括 #define EDEADLK 35 /* 会发生资源死锁 */ #define ENAMETOOLONG 36 /* 文件名太长 */ #define ENOLCK 37 /* 没有可用的记录锁 */ #define ENOSYS 38 /* 功能未实现 */ #define ENOTEMPTY 39 /* 目录不为空 */ #define ELOOP 40 /* 遇到太多符号链接 */ #define EWOULDBLOCK EAGAIN /* 操作会阻塞 */ ...
如果你想知道什么 errno 调用,例如 socket() 或 connect() 可以返回,安装开发手册页并尝试 man socket 或 man connect
于 2008-10-05T17:06:19.970 回答
1
许多函数会设置errno
失败,而不是通过errno.h
你自己并将错误号转换为字符串,你最好调用perror
.
perror
将使用可选前缀打印当前errno
的相应消息。stderr
示例用法:
if (connect())
{
perror("connect() failed in function foo");
...
}
perror
有朋友打电话给他们strerror
,strerror_r
如果您想捕获字符串以用于stderr
.
于 2008-10-06T08:02:25.933 回答