套接字错误的良好资源?

时间:2008-10-05 16:12:53

标签: c++ c sockets

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

4 个答案:

答案 0 :(得分:6)

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

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

  ENETUNREACH
          Network is unreachable.

答案 1 :(得分:2)

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

答案 2 :(得分:1)

你想知道所有可能的错误或对它们的一些评论,你可以看看头文件,在Linux系统上有

  • /usr/include/asm-generic/errno-base.h
#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H

#define EPERM        1  /* Operation not permitted */
#define ENOENT       2  /* No such file or directory */
#define ESRCH        3  /* No such process */
#define EINTR        4  /* Interrupted system call */
#define EIO      5  /* I/O error */
#define ENXIO        6  /* No such device or address */
#define E2BIG        7  /* Argument list too long */
#define ENOEXEC      8  /* Exec format error */
#define EBADF        9  /* Bad file number */
#define ECHILD      10  /* No child processes */
#define EAGAIN      11  /* Try again */
...
  • /usr/include/asm-generic/errno.h
#ifndef _ASM_GENERIC_ERRNO_H
#define _ASM_GENERIC_ERRNO_H

#include 

#define EDEADLK     35  /* Resource deadlock would occur */
#define ENAMETOOLONG    36  /* File name too long */
#define ENOLCK      37  /* No record locks available */
#define ENOSYS      38  /* Function not implemented */
#define ENOTEMPTY   39  /* Directory not empty */
#define ELOOP       40  /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN  /* Operation would block */
...

如果你想知道什么是错误的电话,例如socket()或connect()可以返回,当安装开发手册并尝试man socket或man connect

答案 3 :(得分:1)

许多功能会在errno失败时设置errno.h,而不是自己通过perror并将错误编号转换为字符串,您最好不要致电perror

errno会将当前stderr的相应邮件打印到if (connect()) { perror("connect() failed in function foo"); ... } 并带有可选前缀。

使用示例:

perror

strerror有一个名为strerror_rstderr的朋友,如果你想捕获字符串以便在{{1}}以外的地方使用,那么他们可能会很有用。