IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Linux网络编程常见错误码及分析 -> 正文阅读

[网络协议]Linux网络编程常见错误码及分析

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

EINTR: 4

阻塞的操作被取消阻塞的调用打断。如设置了发送接收超时,就会遇到这种错误。

只能针对阻塞模式的socket。读,写阻塞的socket时,-1返回,错误号为INTR。另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv的返回值为0,那表明连接已经断开,接收操作也应该结束。

ETIMEOUT:110

1、操作超时。一般设置了发送接收超时,遇到网络繁忙的情况,就会遇到这种错误。

2、服务器做了读数据做了超时限制,读时发生了超时。

3、错误被描述为“connect time out”,即“连接超时”,这种情况一般发生在服务器主机崩溃。此时客户 TCP 将在一定时间内(依具体实现)持续重发数据分节,试图从服务 TCP 获得一个 ACK 分节。当最终放弃尝试后(此时服务器未重新启动),内核将会向客户进程返回 ETIMEDOUT 错误。如果某个中间路由器判定该服务器主机已经不可达,则一般会响应“destination unreachable”-“目的地不可达”的ICMP消息,相应的客户进程返回的错误是 EHOSTUNREACH 或ENETUNREACH。当服务器重新启动后,由于 TCP 状态丢失,之前所有的连接信息也不存在了,此时对于客户端发来请求将回应 RST。如果客户进程对检测服务器主机是否崩溃很有必要,要求即使客户进程不主动发送数据也能检测出来,那么需要使用其它技术,如配置 SO_KEEPALIVE Socket 选项,或实现某些心跳函数。

EAGAIN:

1、Send返回值小于要发送的数据数目,会返回EAGAIN和EINTR。

2、recv 返回值小于请求的长度时说明缓冲区已经没有可读数据,但再读不一定会触发EAGAIN,有可能返回0表示TCP连接已被关闭。

3、当socket是非阻塞时,如返回此错误,表示写缓冲队列已满,可以做延时后再重试.

4、在Linux进行非阻塞的socket接收数据时经常出现Resource temporarily unavailable,errno代码为11(EAGAIN),表明在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步,不用管它,下次循环接着recv就可以。对非阻塞socket而言,EAGAIN不是一种错误。

EPIPE:

1、Socket 关闭,但是socket号并没有置-1。继续在此socket上进行send和recv,就会返回这种错误。这个错误会引发SIGPIPE信号,系统会将产生此EPIPE错误的进程杀死。所以,一般在网络程序中,首先屏蔽此消息,以免发生不及时设置socket进程被杀死的情况。

2、write(…) on a socket that has been closed at the other end will cause a SIGPIPE.

3、错误被描述为“broken pipe”,即“管道破裂”,这种情况一般发生在客户进程不理会(或未及时处理)Socket 错误,继续向服务 TCP 写入更多数据时,内核将向客户进程发送 SIGPIPE 信号,该信号默认会使进程终止(此时该前台进程未进行 core dump)。结合上边的 ECONNRESET 错误可知,向一个 FIN_WAIT2 状态的服务 TCP(已 ACK 响应 FIN 分节)写入数据不成问题,但是写一个已接收了 RST 的 Socket 则是一个错误。

EBADF:

read(…) or write(…) on a locally closed socket will return EBADF

EFAULT:

地址错误。

EBUSY:

ECONNREFUSED:

1、拒绝连接。一般发生在连接建立时。

拔服务器端网线测试,客户端设置keep alive时,recv较快返回0, 先收到ECONNREFUSED (Connection refused)错误码,其后都是ETIMEOUT。

2、an error returned from connect(), so it can only occur in a client (if a client is defined as the party that initiates the connection

ECONNRESET:

1、在客户端服务器程序中,客户端异常退出,并没有回收关闭相关的资源,服务器端会先收到ECONNRESET错误,然后收到EPIPE错误。

2、连接被远程主机关闭。有以下几种原因:远程主机停止服务,重新启动;当在执行某些操作时遇到失败,因为设置了“keep alive”选项,连接被关闭,一般与ENETRESET一起出现。

3、远程端执行了一个“hard”或者“abortive”的关闭。应用程序应该关闭socket,因为它不再可用。当执行在一个UDP socket上时,这个错误表明前一个send操作返回一个ICMP“port unreachable”信息。

4、如果client关闭连接,server端的select并不出错(不返回-1,使用select对唯一一个socket进行non- blocking检测),但是写该socket就会出错,用的是send.错误号:ECONNRESET.读(recv)socket并没有返回错误。

5、该错误被描述为“connection reset by peer”,即“对方复位连接”,这种情况一般发生在服务进程较客户进程提前终止。当服务进程终止时会向客户 TCP 发送 FIN 分节,客户 TCP 回应 ACK,服务 TCP 将转入 FIN_WAIT2 状态。此时如果客户进程没有处理该 FIN (如阻塞在其它调用上而没有关闭 Socket 时),则客户 TCP 将处于 CLOSE_WAIT 状态。当客户进程再次向 FIN_WAIT2 状态的服务 TCP 发送数据时,则服务 TCP 将立刻响应 RST。一般来说,这种情况还可以会引发另外的应用程序异常,客户进程在发送完数据后,往往会等待从网络IO接收数据,很典型的如 read 或 readline 调用,此时由于执行时序的原因,如果该调用发生在 RST 分节收到前执行的话,那么结果是客户进程会得到一个非预期的 EOF 错误。此时一般会输出“server terminated prematurely”-“服务器过早终止”错误。

EINVAL:

无效参数。提供的参数非法。有时也会与socket的当前状态相关,如一个socket并没有进入listening状态,此时调用accept,就会产生EINVAL错误。

EMFILE:

打开了太多的socket。对进程或者线程而言,每种实现方法都有一个最大的可用socket数目处理,或者是全局的,或者是局部的。

EWOULDBLOCK:EAGAIN

资源暂时不可用。这个错误是从对非阻塞socket进行的不能立即结束的操作返回的,如当没有数据在队列中可以读时,调用recv。并不是fatal错误,稍后操作可以被重复。调用在一个非阻塞的SOCK_STREAM socket 上调用connect时会产生这个错误,因为有时连接建立必须消耗一定的时间。

ENOTCONN

在一个没有建立连接的socket上,进行read,write操作会返回这个错误。出错的原因是socket没有标识地址。Setsoc也可能会出错。

ECONNRESET

Connection reset by peer.

连接被远程主机关闭。有以下几种原因:远程主机停止服务,重新启动;当在执行某些操作时遇到失败,因为设置了“keep alive”选项,连接被关闭,一般与ENETRESET一起出现。

ECONNABORTED

1、软件导致的连接取消。一个已经建立的连接被host方的软件取消,原因可能是数据传输超时或者是协议错误。

2、该错误被描述为“software caused connection abort”,即“软件引起的连接中止”。原因在于当服务和客户进程在完成用于 TCP 连接的“三次握手”后,客户 TCP 却发送了一个 RST (复位)分节,在服务进程看来,就在该连接已由 TCP 排队,等着服务进程调用 accept 的时候 RST 却到达了。POSIX 规定此时的 errno 值必须 ECONNABORTED。源自 Berkeley 的实现完全在内核中处理中止的连接,服务进程将永远不知道该中止的发生。服务器进程一般可以忽略该错误,直接再次调用accept。

当TCP协议接收到RST数据段,表示连接出现了某种错误,函数read将以错误返回,错误类型为ECONNERESET。并且以后所有在这个套接字上的读操作均返回错误。错误返回时返回值小于0。

ENETUNREACH

网络不可达。Socket试图操作一个不可达的网络。这意味着local的软件知道没有路由到达远程的host。

ENETRESET

网络重置时丢失连接。

由于设置了"keep-alive"选项,探测到一个错误,连接被中断。在一个已经失败的连接上试图使用setsockopt操作,也会返回这个错误。

EINPROGRESS:

操作正在进行中。一个阻塞的操作正在执行。

ENOTSOCK:

在非socket上执行socket操作。

EDESTADDRREQ:

需要提供目的地址。

在一个socket上的操作需要提供地址。如往一个ADDR_ANY 地址上进行sendto操作会返回这个错误。

EMSGSIZE:

消息体太长。

发送到socket上的一个数据包大小比内部的消息缓冲区大,或者超过别的网络限制,或是用来接收数据包的缓冲区比数据包本身小。

EPROTOTYPE

协议类型错误。标识了协议的Socket函数在不支持的socket上进行操作。如ARPA Internet

UDP协议不能被标识为SOCK_STREAM socket类型。

ENOPROTOOPT

该错误不是一个 Socket 连接相关的错误。errno 给出该值可能由于,通过 getsockopt 系统调用来获得一个套接字的当前选项状态时,如果发现了系统不支持的选项参数就会引发该错误。

EPROTONOSUPPORT

不支持的协议。系统中没有安装标识的协议,或者是没有实现。如函数需要SOCK_DGRAM socket,但是标识了stream protocol.。

ESOCKTNOSUPPORT

Socket类型不支持。指定的socket类型在其address family中不支持。如可选选中选项SOCK_RAW,但实现并不支持SOCK_RAW sockets。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:23:00  更:2021-07-26 12:24:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:42:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码