常见的socket出错总结

常见错误

        

 

            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

你可能感兴趣的:(常见的socket出错总结)