2

在哪里可以找到所有类型的 bsd 样式套接字错误的列表?

4

4 回答 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有朋友打电话给他们strerrorstrerror_r如果您想捕获字符串以用于stderr.

于 2008-10-06T08:02:25.933 回答