常见的socket出错总结

原文地址:https://blog.csdn.net/epeaktop/article/details/48714435

linux下的socket更进一步分析:包含本文的错误代码链接如下

https://blog.csdn.net/u010629326/article/details/76021420

 

常见错误

        

            ECONNREFUSED(111):   没有这个端口

            EAGAIN(11):                      buff已满

            EPIPE(32):                        客户端断掉了

            ECONNRESET(104):   客户端先可以正常连接服务端,并可以进行数据收发,

                                                       但当客户端突然掉电,即没有正常的关掉网络资源,

                                                       重启后,客户端还是可以连接服务端,但是发送(send函数)数据给服务端时,

                                                       send函数返回-1,捕捉errno为104,即ECONNRESET。

            ENOBUFS(105):                 例如:使用udp发送>=128K的消息会报ENOBUFS的错误


EPIPE和ECONNRESET区别

EPIPE和ECONNRESET是网络编程实践中很常见的错误。二者都是出现send调用出错的时候,可它们有什么区别呢? 简而言之,二者的区别是本端的socket是否收到过对方socket发出的FIN。
    

/* When we get a reset we do this. */
static void tcp_reset(struct sock *sk)
{
        /* We want the right error as BSD sees it (and indeed as we do). */
        switch (sk->sk_state) {
        case TCP_SYN_SENT:
                sk->sk_err = ECONNREFUSED;
                break;
        case TCP_CLOSE_WAIT:
                sk->sk_err = EPIPE;
                break;
        case TCP_CLOSE:
                return;
        default:
                sk->sk_err = ECONNRESET;
        }
        /* This barrier is coupled with smp_rmb() in tcp_poll() */
        smp_wmb();

        if (!sock_flag(sk, SOCK_DEAD))
                sk->sk_error_report(sk);

        tcp_done(sk);
}

附录


  
  
    
    
    
    
  1. 1 #define EPERM 1 // Operation not permitted 操作不允许
  2. 2 #define ENOENT 2 // No such file or directory 文件/路径不存在
  3. 3 #define ESRCH 3 // No such process 进程不存在
  4. 4 #define EINTR 4 // Interrupted system call 中断的系统调用
  5. 5 #define EIO 5 // I/O error I/O错误
  6. 6 #define ENXIO 6 // No such device or address 设备/地址不存在
  7. 7 #define E2BIG 7 // Arg list too long 参数列表过长
  8. 8 #define ENOEXEC 8 // Exec format error 执行格式错误
  9. 9 #define EBADF 9 // Bad file number 错误文件编号
  10. 10 #define ECHILD 10 // No child processes 子进程不存在
  11. 11 #define EAGAIN 11 // Try again 重试
  12. 12 #define ENOMEM 12 // Out of memory 内存不足
  13. 13 #define EACCES 13 // Permission denied 无权限
  14. 14 #define EFAULT 14 // Bad address 地址错误
  15. 15 #define ENOTBLK 15 // Block device required 需要块设备
  16. 16 #define EBUSY 16 // Device or resource busy 设备或资源忙
  17. 17 #define EEXIST 17 // File exists 文件已存在
  18. 18 #define EXDEV 18 // Cross-device link 跨设备链路
  19. 19 #define ENODEV 19 // No such device 设备不存在
  20. 20 #define ENOTDIR 20 // Not a directory 路径不存在
  21. 21 #define EISDIR 21 // Is a directory 是路径
  22. 22 #define EINVAL 22 // Invalid argument 无效参数
  23. 23 #define ENFILE 23 // File table overflow 文件表溢出
  24. 24 #define EMFILE 24 // Too many open files 打开的文件过多
  25. 25 #define ENOTTY 25 // Not a typewriter 非打字机
  26. 26 #define ETXTBSY 26 // Text file busy 文本文件忙
  27. 27 #define EFBIG 27 // File too large 文件太大
  28. 28 #define ENOSPC 28 // No space left on device 设备无空间
  29. 29 #define ESPIPE 29 // Illegal seek 非法查询
  30. 30 #define EROFS 30 // Read-only file system 只读文件系统
  31. 31 #define EMLINK 31 // Too many links 链接太多
  32. 32 #define EPIPE 32 // Broken pipe 管道破裂
  33. 33 #define EDOM 33 // Math argument out of domain of func 参数超出函数域
  34. 34 #define ERANGE 34 // Math result not representable 结果无法表示
  35. 35 #define EDEADLK 35 // Resource deadlock would occur 资源将发生死锁
  36. 36 #define ENAMETOOLONG 36 // File name too long 文件名太长
  37. 37 #define ENOLCK 37 // No record locks available 没有可用的记录锁
  38. 38 #define ENOSYS 38 // Function not implemented 函数未实现
  39. 39 #define ENOTEMPTY 39 // Directory not empty 目录非空
  40. 40 #define ELOOP 40 // Too many symbolic links encountered 遇到太多符号链接
  41. 41 #define EWOULDBLOCK EAGAIN // Operation would block 操作会阻塞
  42. 42 #define ENOMSG 42 // No message of desired type 没有符合需求类型的消息
  43. 43 #define EIDRM 43 // Identifier removed 标识符已删除
  44. 44 #define ECHRNG 44 // Channel number out of range 通道编号超出范围
  45. 45 #define EL2NSYNC 45 // Level 2 not synchronized level2不同步
  46. 46 #define EL3HLT 46 // Level 3 halted 3级停止
  47. 47 #define EL3RST 47 // Level 3 reset 3级重置
  48. 48 #define ELNRNG 48 // Link number out of range 链接编号超出范围
  49. 49 #define EUNATCH 49 // Protocol driver not attached 协议驱动程序没有连接
  50. 50 #define ENOCSI 50 // No CSI structure available 没有可用的CSI结构
  51. 51 #define EL2HLT 51 // Level 2 halted 2级停止
  52. 52 #define EBADE 52 // Invalid exchange 无效交换
  53. 53 #define EBADR 53 // Invalid request descriptor 无效请求描述
  54. 54 #define EXFULL 54 // Exchange full 交换完全
  55. 55 #define ENOANO 55 // No anode 无阳极
  56. 56 #define EBADRQC 56 // Invalid request code 无效请求码
  57. 57 #define EBADSLT 57 // Invalid slot 无效插槽
  58. 58 #define EDEADLOCK EDEADLK
  59. 59 #define EBFONT 59 // Bad font file format 错误的字体文件格式
  60. 60 #define ENOSTR 60 // Device not a stream 设备不是流
  61. 61 #define ENODATA 61 // No data available 无数据
  62. 62 #define ETIME 62 // Timer expired 计时器到期
  63. 63 #define ENOSR 63 // Out of streams resources 流资源不足
  64. 64 #define ENONET 64 // Machine is not on the network 机器不在网络上
  65. 65 #define ENOPKG 65 // Package not installed 包未安装
  66. 66 #define EREMOTE 66 // Object is remote 对象是远程
  67. 67 #define ENOLINK 67 // Link has been severed 链接正在服务中
  68. 68 #define EADV 68 // Advertise error 广告错误
  69. 69 #define ESRMNT 69 // Srmount error ?
  70. 70 #define ECOMM 70 // Communication error on send 发送过程中通讯错误
  71. 71 #define EPROTO 71 // Protocol error 协议错误
  72. 72 #define EMULTIHOP 72 // Multihop attempted 多跳尝试
  73. 73 #define EDOTDOT 73 // RFS specific error RFS特定错误
  74. 74 #define EBADMSG 74 // Not a data message 不是数据类型消息
  75. 75 #define EOVERFLOW 75 // Value too large for defined data type 对指定的数据类型来说值太大
  76. 76 #define ENOTUNIQ 76 // Name not unique on network 网络上名字不唯一
  77. 77 #define EBADFD 77 // File descriptor in bad state 文件描述符状态错误
  78. 78 #define EREMCHG 78 // Remote address changed 远程地址改变
  79. 79 #define ELIBACC 79 // Can not access a needed shared library 无法访问需要的共享库
  80. 80 #define ELIBBAD 80 // Accessing a corrupted shared library 访问损坏的共享库
  81. 81 #define ELIBSCN 81 // .lib section in a.out corrupted 库部分在a.out损坏
  82. 82 #define ELIBMAX 82 // Attempting to link in too many shared libraries 试图链接太多的共享库
  83. 83 #define ELIBEXEC 83 // Cannot exec a shared library directly 不能直接运行共享库
  84. 84 #define EILSEQ 84 // Illegal byte sequence 非法字节序
  85. 85 #define ERESTART 85 // Interrupted system call should be restarted 应重新启动被中断的系统调用
  86. 86 #define ESTRPIPE 86 // Streams pipe error 流管错误
  87. 87 #define EUSERS 87 // Too many users 用户太多
  88. 88 #define ENOTSOCK 88 // Socket operation on non-socket 在非套接字上进行套接字操作
  89. 89 #define EDESTADDRREQ 89 // Destination address required 需要目的地址
  90. 90 #define EMSGSIZE 90 // Message too long 消息太长
  91. 91 #define EPROTOTYPE 91 // Protocol wrong type for socket 错误协议类型
  92. 92 #define ENOPROTOOPT 92 // Protocol not available 协议不可用
  93. 93 #define EPROTONOSUPPORT 93 // Protocol not supported 不支持协议
  94. 94 #define ESOCKTNOSUPPORT 94 // Socket type not supported 不支持套接字类型
  95. 95 #define EOPNOTSUPP 95 // Operation not supported on transport endpoint 操作上不支持传输端点
  96. 96 #define EPFNOSUPPORT 96 // Protocol family not supported 不支持协议族
  97. 97 #define EAFNOSUPPORT 97 // Address family not supported by protocol 协议不支持地址群
  98. 98 #define EADDRINUSE 98 // Address already in use 地址已被使用
  99. 99 #define EADDRNOTAVAIL 99 // Cannot assign requested address 无法分配请求的地址
  100. 100 #define ENETDOWN 100 // Network is down 网络已关闭
  101. 101 #define ENETUNREACH 101 // Network is unreachable 网络不可达
  102. 102 #define ENETRESET 102 // Network dropped connection because of reset 网络由于复位断开连接
  103. 103 #define ECONNABORTED 103 // Software caused connection abort 软件导致连接终止
  104. 104 #define ECONNRESET 104 // Connection reset by peer 连接被对方复位
  105. 105 #define ENOBUFS 105 // No buffer space available 没有可用的缓存空间
  106. 106 #define EISCONN 106 // Transport endpoint is already connected 传输端点已连接
  107. 107 #define ENOTCONN 107 // Transport endpoint is not connected 传输端点未连接
  108. 108 #define ESHUTDOWN 108 // Cannot send after transport endpoint shutdown 传输端点关闭后不能在发送
  109. 109 #define ETOOMANYREFS 109 // Too many references: cannot splice 太多的引用:无法接合
  110. 110 #define ETIMEDOUT 110 // Connection timed out 连接超时
  111. 111 #define ECONNREFUSED 111 // Connection refused 连接被拒绝
  112. 112 #define EHOSTDOWN 112 // Host is down 主机已关闭
  113. 113 #define EHOSTUNREACH 113 // No route to host 无法路由到主机
  114. 114 #define EALREADY 114 // Operation already in progress 操作已在进程中
  115. 115 #define EINPROGRESS 115 // Operation now in progress 进程中正在进行的操作
  116. 116 #define ESTALE 116 // Stale NFS file handle
  117. 117 #define EUCLEAN 117 // Structure needs cleaning
  118. 118 #define ENOTNAM 118 // Not a XENIX named type file
  119. 119 #define ENAVAIL 119 // No XENIX semaphores available
  120. 120 #define EISNAM 120 // Is a named type file
  121. 121 #define EREMOTEIO 121 // Remote I/O error
  122. 122 #define EDQUOT 122 // Quota exceeded
  123. 123 #define ENOMEDIUM 123 // No medium found
  124. 124 #define EMEDIUMTYPE 124 // Wrong medium type

参考

http://blog.csdn.net/xiaoweige207/article/details/6211577

http://blog.csdn.net/hguisu/article/details/38700899

你可能感兴趣的:(tcp)