22:参数错误,比如ip地址不合法,没有目标端口等

101:网络不可达,比如不能ping通

111:链接被拒绝,比如目标关闭链接等

115:当链接设置为非阻塞时,目标没有及时应答,返回此错误,socket可以继续使用

附录:Linux的错误码表(errno table)

_ 124 EMEDIUMTYPE_ Wrong medium type
_ 123 ENOMEDIUM__ No medium found
_ 122 EDQUOT___  Disk quota exceeded
_ 121 EREMOTEIO__ Remote I/O error
_ 120 EISNAM___  Is a named type file
_ 119 ENAVAIL___ No XENIX semaphores available
_ 118 ENOTNAM___ Not a XENIX named type file
_ 117 EUCLEAN___ Structure needs cleaning
_ 116 ESTALE___  Stale NFS file handle
_ 115 EINPROGRESS  +Operation now in progress
_ 114 EALREADY__  Operation already in progress
_ 113 EHOSTUNREACH  No route to host
_ 112 EHOSTDOWN__ Host is down
_ 111 ECONNREFUSED  Connection refused
_ 110 ETIMEDOUT_  +Connection timed out
_ 109 ETOOMANYREFS  Too many references: cannot splice
_ 108 ESHUTDOWN__ Cannot send after transport endpoint shutdown
_ 107 ENOTCONN__  Transport endpoint is not connected
_ 106 EISCONN___ Transport endpoint is already connected
_ 105 ENOBUFS___ No buffer space available
_ 104 ECONNRESET_  Connection reset by peer
_ 103 ECONNABORTED  Software caused connection abort
_ 102 ENETRESET__ Network dropped connection on reset
_ 101 ENETUNREACH_ Network is unreachable
_ 100 ENETDOWN__  Network is down
_  99 EADDRNOTAVAIL Cannot assign requested address
_  98 EADDRINUSE_  Address already in use
_  97 EAFNOSUPPORT  Address family not supported by protocol
_  96 EPFNOSUPPORT  Protocol family not supported
_  95 EOPNOTSUPP_  Operation not supported
_  94 ESOCKTNOSUPPORT Socket type not supported
_  93 EPROTONOSUPPORT Protocol not supported
_  92 ENOPROTOOPT_ Protocol not available
_  91 EPROTOTYPE_  Protocol wrong type for socket
_  90 EMSGSIZE__ +Message too long
_  89 EDESTADDRREQ  Destination address required
_  88 ENOTSOCK__  Socket operation on non-socket
_  87 EUSERS___  Too many users
_  86 ESTRPIPE__  Streams pipe error
_  85 ERESTART__  Interrupted system call should be restarted
_  84 EILSEQ___  Invalid or incomplete multibyte or wide character
_  83 ELIBEXEC__  Cannot exec a shared library directly
_  82 ELIBMAX___ Attempting to link in too many shared libraries
_  81 ELIBSCN___ .lib section in a.out corrupted
_  80 ELIBBAD___ Accessing a corrupted shared library
_  79 ELIBACC___ Can not access a needed shared library
_  78 EREMCHG___ Remote address changed
_  77 EBADFD___  File descriptor in bad state
_  76 ENOTUNIQ__  Name not unique on network
_  75 EOVERFLOW__ Value too large for defined data type
_  74 EBADMSG__  +Bad message
_  73 EDOTDOT___ RFS specific error
_  72 EMULTIHOP__ Multihop attempted
_  71 EPROTO___  Protocol error
_  70 ECOMM____ Communication error on send
_  69 ESRMNT___  Srmount error
_  68 EADV____  Advertise error
_  67 ENOLINK___ Link has been severed
_  66 EREMOTE___ Object is remote
_  65 ENOPKG___  Package not installed
_  64 ENONET___  Machine is not on the network
_  63 ENOSR____ Out of streams resources
_  62 ETIME____ Timer expired
_  61 ENODATA___ No data available
_  60 ENOSTR___  Device not a stream
_  59 EBFONT___  Bad font file format
_  57 EBADSLT___ Invalid slot
_  56 EBADRQC___ Invalid request code
_  55 ENOANO___  No anode
_  54 EXFULL___  Exchange full
_  53 EBADR____ Invalid request descriptor
_  52 EBADE____ Invalid exchange
_  51 EL2HLT___  Level 2 halted
_  50 ENOCSI___  No CSI structure available
_  49 EUNATCH___ Protocol driver not attached
_  48 ELNRNG___  Link number out of range
_  47 EL3RST___  Level 3 reset
_  46 EL3HLT___  Level 3 halted
_  45 EL2NSYNC__  Level 2 not synchronized
_  44 ECHRNG___  Channel number out of range
_  43 EIDRM____ Identifier removed
_  42 ENOMSG___  No message of desired type
_  40 ELOOP____ Too many levels of symbolic links
_  39 ENOTEMPTY_  +Directory not empty
_  38 ENOSYS___ +Function not implemented
_  37 ENOLCK___ +No locks available
_  36 ENAMETOOLONG +File name too long
_  35 EDEADLK__  +Resource deadlock avoided
_  34 ERANGE___ +Numerical result out of range
_  33 EDOM____ +Numerical argument out of domain
_  32 EPIPE___  +Broken pipe
_  31 EMLINK___ +Too many links
_  30 EROFS___  +Read-only file system
_  29 ESPIPE___ +Illegal seek
_  28 ENOSPC___ +No space left on device
_  27 EFBIG___  +File too large
_  26 ETXTBSY___ Text file busy
_  25 ENOTTY___ +Inappropriate ioctl for device
_  24 EMFILE___ +Too many open files
_  23 ENFILE___ +Too many open files in system
_  22 EINVAL___ +Invalid argument
_  21 EISDIR___ +Is a directory
_  20 ENOTDIR__  +Not a directory
_  19 ENODEV___ +No such device
_  18 EXDEV___  +Invalid cross-device link
_  17 EEXIST___ +File exists
_  16 EBUSY___  +Device or resource busy
_  15 ENOTBLK___ Block device required
_  14 EFAULT___ +Bad address
_  13 EACCES___ +Permission denied
_  12 ENOMEM___ +Cannot allocate memory
_  11 EAGAIN___ +Resource temporarily unavailable
_  10 ECHILD___ +No child processes
__ 9 EBADF___  +Bad file descriptor
__ 8 ENOEXEC__  +Exec format error
__ 7 E2BIG___  +Argument list too long
__ 6 ENXIO___  +No such device or address
__ 5 EIO____  +Input/output error
__ 4 EINTR___  +Interrupted system call
__ 3 ESRCH___  +No such process
__ 2 ENOENT___ +No such file or directory
__ 1 EPERM___  +Operation not permitted
#_  0 --_____  Success

附录参考 http://fanqiang.chinaunix.net/a4/b7/20010913/0900001283.html

摘要:

讨论关于利用select()检测对方Socket关闭的问题: 
 
仍然是本地Socket有东东可读,因为对方Socket关闭时,会发一个关闭连接 
通知报文,会马上被select()检测到的。关于TCP的连接(三次握手)和关 
闭(二次握手)机制,敬请参考有关TCP/IP的书籍。 
 
不知是什么原因,UNIX好象没有提供通知进程关于Socket或Pipe对方关闭的 
信号,也可能是cpu所知有限。总之,当对方关闭,一执行recv()或read(), 
马上回返回-1,此时全局变量errno的值是115,相应的sys_errlist[errno] 
为"Connect refused"(请参考/usr/include/sys/errno.h)。所以,在上 
篇的for(;;)...select()程序块中,当有东西可读时,一定要检查recv()或 
read()的返回值,返回-1时要作出关断本地Socket的处理,否则select()会 
一直认为有东西读,其结果曾几令cpu伤心欲断针脚。不信你可以试试:不检 
查recv()返回结果,且将收到的东东(实际没收到)写至标准输出... 
在有名管道的编程中也有类似问题出现。具体处理详见拙作:发布一个有用 
的Socket客户方原码。 
 
至于主动写Socket时对方突然关闭的处理则可以简单地捕捉信号SIGPIPE并作 
出相应关断本地Socket等等的处理。SIGPIPE的解释是:写入无读者方的管道。 
在此不作赘述,请详man signal。 
 
以上是cpu在作tcp/ip数据传输实验积累的经验,若有错漏,请狂炮击之。 
 
唉,昨天在hacker区被一帮孙子轰得差点儿没短路。ren cpu(奔腾的心) z80 
 
补充关于select在异步(非阻塞)connect中的应用,刚开始搞socket编程的时候 
我一直都用阻塞式的connect,非阻塞connect的问题是由于当时搞proxy scan 
而提出的呵呵 
通过在网上与网友们的交流及查找相关FAQ,总算知道了怎么解决这一问题.同样 
用select可以很好地解决这一问题.大致过程是这样的: 
 
1.将打开的socket设为非阻塞的,可以用fcntl(socket, F_SETFL, O_NDELAY)完 
成(有的系统用FNEDLAY也可). 
 
2.发connect调用,这时返回-1,但是errno被设为EINPROGRESS,意即connect仍旧 
在进行还没有完成. 
 
3.将打开的socket设进被监视的可写(注意不是可读)文件集合用select进行监视, 
如果可写,用 
        getsockopt(socket, SOL_SOCKET, SO_ERROR, &error, sizeof(int)); 
来得到error的值,如果为零,则connect成功. 
 
在许多unix版本的proxyscan程序你都可以看到类似的过程,另外在solaris精华 
区->编程技巧中有一个通用的带超时参数的connect模块.

原文链接:

http://blog.csdn.net/zimu2702/article/details/8060654

linux错误码分析相关推荐

  1. linux错误码5 io error,IO出错常用错误代码

    在Linux文件操作以及更底层的IO操作出错的情况下,经常会为该如何返回合适的错误代码而纠结.另外在阅读代码的时候,可能会碰到很多种错误代码,因为不明白它的含义而迷惑.为此,有必要归纳整理一下常见的所 ...

  2. linux错误码中文解释,Linux命令之perror - 解释错误代码

    用途说明: perror命令是MySQL数据库系统中的一个工具程序,它用于打印C语言中errno错误代码的含义.也可以打印MySQL中存储引擎错误代码的含义.(perror prints a desc ...

  3. linux错误码61,Linux编程中的错误码列表

    有时可以知道错误的数值,但是如果不知道对应于那个宏定义,也很难知道这个错误描述的是什么.我平时这两种方法来确定:在内核源码中搜索和查看头文件. 在内核源码中搜索一般都可以搜到,而且使用source i ...

  4. linux 错误码256,Linux 错误码对照表

    errno 在 中定义,错误 Exx 的宏定义在 /usr/include/asm-generic 文件夹下面的  errno-base.h 和 errno.h,分别定义了 1-34 .35-132 ...

  5. 【Linux系统编程】快速查找errno错误码信息

    我们都知道,errno整型变量被普遍应用于*NIX C的异常处理中,其记录了最近一次的错误码.通过判断错误码的值,以此执行不同的错误处理,这是C语言典型的异常处理方式.其错误名称,比如EAGAIN.E ...

  6. Linux常用错误码--errno-base.h

    经常会需要用到错误码,但是它具体的值 是什么呢,往往不太清楚,所以在使用的时候非常不舒服,下面把linux平台下常用的错误码列了下. 我是Fedora12系统,找到的定义文件是:/usr/includ ...

  7. ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析

    文章目录 前言 一.什么是 SSH? 二.ssh 配置无密码登陆原理 三.Linux 系统上生成 SSH 密钥和公钥 四.登录验证 总结 前言 对于 Hadoop 的伪分布式和全分布式而言,Hadoo ...

  8. .lastevent、!analyze(dump分析、异常错误码查询)

    .lastevent .lastevent 命令显示最近一次发生的异常或事件. [cpp] view plaincopy 0:000> .lastevent Last event: 1534.f ...

  9. Linux系统C/C++通用错误码实现模板

    背景 公司C++项目初期是安排不同的人编写不同的模块,有嵌入式ARM的,有socket协议的,有mysql的,有redis的,不同人风格不同.由于当时我还在运维小组搞docker,没参与规则的制定,后 ...

最新文章

  1. js获取URL请求参数与改变src
  2. Android实现CoverFlow效果
  3. 基于keras 的神经网络股价预测模型
  4. 2021年高考成绩查询贵州分数线,2021年贵州省高考分数线
  5. Codeforces Round #618 (Div. 2)-Non-zero
  6. 4Python切片功能剖析
  7. LeetCode每日打卡 - 4的幂
  8. vc中把数据库记录表导入Excel
  9. Photoshop操作秘籍
  10. 域名解析与邮件服务器收发问题
  11. 西门子S7200PLC连接CHNet-S7200PD实现以太网通信配置方法
  12. 【黑马Python】(3)
  13. javascript 表单提交和验证的方法
  14. Java 常用数据类型(总结)
  15. linux删除arp绑定失败,我用这个命令后总是说“ARP项目删除失败:请求的操作需要提升...
  16. 向量检索milvus之一:以图搜图
  17. 线性代数学习笔记——第四十一讲——n维向量空间的子空间
  18. windows获取iOS设备信息
  19. MySQL的文本导入load data local
  20. WEditor没有自动打开浏览器

热门文章

  1. 深度学习、目标检测情景中常见的模型评测指标
  2. 【转载】间谍新高度:间谍组织​Turla利用卫星通信隐藏CC服务器
  3. 论文阅读 (58):Research and Implementation of Global Path Planning for Unmanned Surface Vehicle Based...
  4. 高级程序猿是如何练成的
  5. 编程之路上的感悟-编程语言该怎么选
  6. 数据存、管、用一体构建企业数据安全堡垒
  7. 《大数据时代》-[英]维克托.迈尔-舍恩伯格 肯尼斯.库克耶
  8. Python分享消息到Twitter、Youtube、Facebook平台
  9. 利用火绒安全软件修改host文件,加速访问GitHub网站
  10. 在ArcGIS中批量删除属性表字段