【问题标题】:good resource for socket errors?套接字错误的好资源?
【发布时间】:2010-09-15 09:23:43
【问题描述】:

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

【问题讨论】:

    标签: c++ c sockets


    【解决方案1】:

    在文档中?例如,对于 connect(),请参阅:

    % man connect
    ...
      ECONNREFUSED
              No-one listening on the remote address.
      EISCONN
              The socket is already connected.
    
      ENETUNREACH
              Network is unreachable.
    

    【讨论】:

      【解决方案2】:

      您还可以在 Open Group 的页面上找到每个功能的错误代码列表(及其含义的一般描述)(例如 connect)。

      【讨论】:

        【解决方案3】:

        如果您想知道所有可能的 errno 或它们上的一些 cmets,您可以查看头文件,在 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

        【讨论】:

          【解决方案4】:

          许多函数会将errno 设置为失败,与其自己通过errno.h 并将错误号转换为字符串,不如调用perror

          perror 会将当前errno 的对应消息打印到stderr,并带有可选前缀。

          示例用法:

          if (connect())
          {
              perror("connect() failed in function foo");
              ...
          }
          

          perror 有名为 strerrorstrerror_r 的朋友,如果您想捕获字符串以在 stderr 以外的地方使用,他们可能会很有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-08-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多