错误号

错误

可能的原因

EAGAIN

Try again

在读数据的时候,没有数据在底层缓冲的时候会遇到,一般的处理是循环进行读操作,异步模式还会等待读事件的发生再读

EWOULDBLOCK

Operation would block

在我们的环境中和EAGAIN是一个值, 一般情况下只关心EAGAIN就可以了

EPIPE

Broken pipe

接收端关闭(缓冲中没有多余的数据),但是发送端还在write.

ECONNRESET

Connection reset by peer

收 到RST包 可能是 接收到数据后不进行读取或者没有读取完毕直接close,另一端再调用write或者read操作,这个时候需要检查一下是否存在脏数据或者一端某些情况 下断开的情况. 另外 使用了SO_LINGER后close连接,另一端也会收到这个错误. 另外在epoll中一般也是可能返回EPOLLHUP事件。 连接的时候也可能出现这样的错误,这个参考后面的 "listen的时候的backlog有什么影响 "中的说明

EINTR

Interrupted system call

被其他的系统调用中断了, 对于句柄进行操作比较容易出现,一般裸用recv都是需要判断的, 处理也很简单, 再进行一次操作就可以了

ETIMEDOUT

Connection timed out

连接超时, 但是在我们ul_sread_xxx或者ul_swrite_xx系列中也被我们用来表示读写超时

ECONNREFUSED

Connection refused

拒绝连接, 一般在机器存在但是相应的端口上没有数据的时候出现

ENETUNREACH

Network is unreachable

网络不可达,可能是由于路器的限制不能访问,需要检查网络

EADDRNOTAVAIL

Cannot assign requested address

不能分配本地地址,一般在端口不够用的时候会出现,很可能是短连接的TIME_WAIT问题造成

EADDRINUSE

Address already in use

地址已经被使用, 已经有相应的服务程序占用了这个端口, 或者占用端口的程序退出了但没有设置端口复用

ENOTCONN

Transport endpoint is not connected

连接没有链上。 在一个socket出来还没有accept或者connenct, 还有一种情况就是收到对方发送过来的RST包,系统已经确认连接被断

对一些常见错误号的分析

Linux Socket Errno 错误代码列表

124EMEDIUMTYPE   Wrong medium type
123 ENOMEDIUM    No medium found

122EDQUOT        Disk quota exceeded
121 EREMOTEIO    Remote I/O error
120EISNAM        Is a named type file
119ENAVAIL       No XENIX semaphores available
118ENOTNAM       Not a XENIX named type file
117EUCLEAN       Structure needs cleaning
116ESTALE        Stale NFS file handle
115 EINPROGRESS  +Operation nowin progress
114EALREADY      Operation already in progress
113 EHOSTUNREACH  No route tohost
112 EHOSTDOWN    Host is down
111 ECONNREFUSED  Connection refused
110 ETIMEDOUT   +Connection timed out
109 ETOOMANYREFS  Too manyreferences: cannot splice
108 ESHUTDOWN    Cannot send after transport endpoint shutdown
107ENOTCONN      Transport endpoint is not connected
106EISCONN       Transport endpoint is alreadyconnected
105ENOBUFS       No buffer space available
104 ECONNRESET   Connection reset by peer
103 ECONNABORTED  Softwarecaused connection abort
102 ENETRESET    Network dropped connection on reset
101 ENETUNREACH   Networkis unreachable
100ENETDOWN      Network is down
99 EADDRNOTAVAIL Cannot assignrequested address
98 EADDRINUSE   Address already in use
97 EAFNOSUPPORT  Addressfamily not supported by protocol
96 EPFNOSUPPORT  Protocolfamily not supported
95 EOPNOTSUPP   Operation not supported
94 ESOCKTNOSUPPORT Socket typenot supported
93 EPROTONOSUPPORT Protocol notsupported
92 ENOPROTOOPT  Protocol not available
91 EPROTOTYPE   Protocol wrong type for socket
90EMSGSIZE     +Message too long
89 EDESTADDRREQ Destination address required
88ENOTSOCK      Socket operation on non-socket
87EUSERS        Too many users
86ESTRPIPE      Streams pipe error
85 ERESTART     Interrupted system call should be restarted
84EILSEQ        Invalid or incompletemultibyte or wide character
83ELIBEXEC      Cannot exec a shared library directly
82ELIBMAX       Attempting to link in too manyshared libraries
81 ELIBSCN      .lib section in a.out corrupted
80ELIBBAD       Accessing a corrupted shared library
79ELIBACC       Can not access a needed sharedlibrary
78EREMCHG       Remote address changed
77EBADFD        File descriptor in bad state
76ENOTUNIQ      Name not unique on network
75EOVERFLOW     Value too large for defined data type
74EBADMSG      +Bad message
73EDOTDOT       RFS specific error
72EMULTIHOP     Multihop attempted
71EPROTO        Protocol error
70ECOMM         Communication error onsend
69ESRMNT        Srmount error
68EADV          Advertise error
67ENOLINK       Link has been severed
66EREMOTE       Object is remote
65ENOPKG        Package not installed
64ENONET        Machine is not on the network
63ENOSR         Out of streams resources
62ETIME         Timer expired
61ENODATA       No data available
60ENOSTR        Device not a stream
59EBFONT        Bad font file format
57EBADSLT       Invalid slot
56EBADRQC       Invalid request code
55ENOANO        No anode
54EXFULL        Exchange full
53EBADR         Invalid request descriptor
52EBADE         Invalid exchange
51EL2HLT        Level 2 halted
50ENOCSI        No CSI structure available
49EUNATCH       Protocol driver not attached
48ELNRNG        Link number out of range
47EL3RST        Level 3 reset
46EL3HLT        Level 3 halted
45EL2NSYNC      Level 2 not synchronized
44ECHRNG        Channel number out of range
43EIDRM         Identifier removed
42ENOMSG        No message of desired type
40ELOOP         Too many levels ofsymbolic links
39 ENOTEMPTY   +Directory not empty
38 ENOSYS      +Function not implemented
37ENOLCK       +No locks available
36 ENAMETOOLONG +File name toolong
35EDEADLK      +Resource deadlock avoided
34ERANGE       +Numerical result out of range
33EDOM         +Numerical argument out ofdomain
32EPIPE        +Broken pipe
31EMLINK       +Too many links
30EROFS        +Read-only file system
29ESPIPE       +Illegal seek
28ENOSPC       +No space left on device
27EFBIG        +File too large
26ETXTBSY       Text file busy
25ENOTTY       +Inappropriate ioctl for device
24EMFILE       +Too many open files
23ENFILE       +Too many open files in system
22EINVAL       +Invalid argument
21EISDIR       +Is a directory
20ENOTDIR      +Not a directory
19ENODEV       +No such device
18EXDEV        +Invalid cross-device link
17EEXIST       +File exists
16EBUSY        +Device or resource busy
15ENOTBLK       Block device required
14 EFAULT      +Bad address
13EACCES       +Permission denied
12ENOMEM       +Cannot allocate memory
11EAGAIN       +Resource temporarily unavailable
10ECHILD       +No child processes
9EBADF        +Bad file descriptor
8ENOEXEC      +Exec format error
7E2BIG        +Argument list too long
6ENXIO        +No such device or address
5EIO          +Input/output error
4EINTR        +Interrupted system call
3ESRCH        +No such process
2ENOENT       +No such file or directory
1EPERM        +Operation not permitted
#    0--            Success

send to函数是在网络编程中常用的函数之一,用于向指定的套接字发送数据。在 send to函数调用失败时, errno 会被设置为相应的 错误码 ,我们可以通过对 errno 的值进行判断来确定 错误 的类型,并进行相应的处理。总结而言, send to函数的 错误码 提供了对发送数据失败的原因进行识别和处理的方法。通过检查 errno 的值,我们可以根据不同的 错误码 采取相应的处理措施,以优化网络编程中的 错误 处理逻辑。在成功调用 send to函数后,不会更改 errno 的值,因此在处理 错误 时需要及时获取 errno 的值。 第一个参数指定接收端套接字描述符;第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;第三个参数指明buf的长度;第四个参数一般置0或者以下组合:MSG_DONTROUTE:不查找路由表,是 send 函数使用的标志.这个标志告诉IP协议.目的主机在本地网络上面,没有必要查找路由表.这个标志一般用网络诊断和路由程式里面MSG_OOB:接受或发送带外数据,表示能够接收和发送带外的数据. python socket .error: [ Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案: 前几天使用python读取网页。因为对一个网站大量的使用urlopen操作,所以会被那个网站认定为攻击行为。有时就不再允许下载。导致urlopen()后,request.read()一直卡死在那里。最后会抛出 errno 10054. 这个 错误 是connection reset by peer.也就是传说的远端主机重置了此连接。原因可能是 socket 超时时间过长;也可能是request = urllib.request.urlopen(url)之后,没有进行request.cl errno 在 中定义, 错误 Exx 的宏定义在 /usr/include/asm-generic 文件夹下面的 errno -base.h 和 errno .h,分别定义了 1-34 、35-132 的 错误 定义。 strerror() 函数依据 errno 值返回 错误 描述字符串,下面程序打印对照表: #include #include #include int main() perror ( )用 来 将 上 一 个函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上 错误 原 内容: 记录网络编程 常见 errno 错误 EAGAIN (Try again ) : 在读数据的时候,没有数据在底层缓冲的时候会遇到.比如我们epoll使用边缘 触发的时候,是需要在每次事件轮回中处理所有的消息,因为不然就得等下一次事件轮回才能处理了,因此 我们基本用边缘跟非阻塞fd一起使用,然后通过判断返回值-1时, errno 为EAGAIN来判断已经读完了 EWOULDBLOCK (Operation would block) : 有的 系统 是EWOULDBLOCK,而不是EAGAIN EPIPE(Br Exception: Traceback (most recent call last): File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connection.py", line 138, in _new_conn 我正在尝试使用UDP(作为练习)运行一个简单的客户端 - 服务器应用程序,OS Linux Mint 14.客户端在启动时向服务器发送请求以获取一些会话参数,包括usec中的超时 . 客户端打开一个套接字并设置一个默认超时值,以便在recvfrom上不被无限制地阻塞,然后发送对这些参数的请求,关闭所述套接字,重新打开设置新超时值的套接字,最后询问用户用于命令 .参数请求由子函数处理,该子函数除了其... 虽然 errno 是非线程安全的,但是可以通过几种机制保证其安全。。 最近在使用的过程中获得了 errno ,程序无法执行,也不知道如何解决问题。因此,理解每一个返回的 errno 整数值的含义是很重要的。。 这个我们可以通过strerror函数来实现。。 strerror(返回整数 errno 对应的 错误 原因的描述字符串) 所需头文件: #include 函数声明: char * strerror(int errnum); 输入: 整数 errno 输出: 返回描述.  最近在网络编程使用的过程中,发现 errno 会经常使用。因此决定在此做个留用,以备以后使用。。。 虽然 errno 是非线程安全的,但是可以通过几种机制保证其安全。。 最近在使用的过程中获得了 errno ,程序无法执行,也不知道如何解决问题。因此,理解每一个返回的 errno 整数值的含义是很重要的。。这个我们可以通过strerror函数来实现。。 strerror(返回整数 errno