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