首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python套接字ConnectionResetError:[Errno 54]对等设备重置连接vs socket.error:[Errno 104]对等设备重置连接

基础概念

ConnectionResetError: [Errno 54] 对等设备重置连接socket.error: [Errno 104] 对等设备重置连接 都是Python中常见的网络错误,表示在TCP连接过程中,对端(peer)突然关闭了连接。这两个错误的主要区别在于它们分别来自Python 3.5+的socket模块和旧版本的socket模块。

相关优势

  • TCP连接的可靠性:TCP协议提供了可靠的、面向连接的通信服务,确保数据包按顺序到达且无丢失。
  • 跨平台性:Python的socket模块可以在不同的操作系统上使用,具有很好的跨平台性。

类型

  • 主动重置:对端主动关闭连接,通常是因为对端应用程序退出或遇到错误。
  • 被动重置:由于网络问题(如路由器故障、防火墙设置等)导致连接被重置。

应用场景

这些错误通常出现在以下场景:

  • 客户端与服务器之间的通信。
  • 实时数据处理系统。
  • 网络爬虫和API调用。

问题原因及解决方法

原因

  1. 对端主动关闭连接:对端应用程序可能因为错误、超时或其他原因关闭了连接。
  2. 网络问题:中间网络设备(如路由器、防火墙)可能因为配置问题或故障导致连接被重置。
  3. 资源限制:服务器可能因为资源限制(如文件描述符不足)而关闭连接。

解决方法

  1. 异常处理:在代码中添加异常处理,捕获并处理这些错误,避免程序崩溃。
  2. 异常处理:在代码中添加异常处理,捕获并处理这些错误,避免程序崩溃。
  3. 重试机制:在遇到连接重置错误时,可以尝试重新连接。
  4. 重试机制:在遇到连接重置错误时,可以尝试重新连接。
  5. 检查网络配置:确保网络设备和防火墙配置正确,没有阻止或限制连接。
  6. 资源管理:确保服务器有足够的资源(如文件描述符)来处理连接请求。

参考链接

通过以上方法,可以有效处理和预防ConnectionResetErrorsocket.error错误,确保网络通信的稳定性和可靠性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入剖析Linux网络设计中网络IO的重要角色

例如,在尝试将UNIX域数据报套接连接到流套接时,可能会发生此错误。 ETIMEDOUT 尝试连接时超时。服务器可能太忙,无法接受新连接。...当流套接对等端执行有序关闭时,返回值将为0;不同域(例如UNIX和Internet域)中的数据报套接允许零长度数据报,当接收到这样的数据报时,返回值为0;如果从流套接接收的请求字节数为0,则也可以返回值...ENOTCONN 套接与面向连接的协议关联,尚未连接。 ENOTSOCK 文件描述符sockfd不引用套接。...EconReset 对等重置连接。 EDESTADDRREQ 套接不是连接模式,并且未设置对等地址。 EFAULT 为参数指定了无效的用户空间地址。 EINTR 在传输任何数据之前发生的信号。...当设备队列溢出时,数据包会自动丢弃。) ENOMEM 没有可用内存。 ENOTCONN 未连接套接,且未指定目标。 ENOTSOCK 文件描述符sockfd不引用套接

10520
  • Python内置异常类型全面汇总

    内置异常基类 在 Python 中,所有异常必须为一个派生自 BaseException 的类的实例。 通过子类化创建的两个不相关异常类永远是不等效的,既使它们具有相同的名称。...BlockingIOError 操作将阻塞对象设置为非阻塞操作 | +-- ChildProcessError 子进程上的操作失败 | +-- ConnectionError 与连接相关的异常的基类...| | +-- BrokenPipeError 在已关闭写入的套接上写入 | | +-- ConnectionAbortedError 连接尝试被对等方中止 | | +-...- ConnectionRefusedError 连接尝试被对等方拒绝 | | +-- ConnectionResetError 连接对等重置 | +-- FileExistsError...-- NotImplementedError 尚未实现的方法 | +-- RecursionError 解释器检测到超出最大递归深度 +-- SyntaxError Python

    1.5K10

    socket的五大误区

    隐患 2.对等套接闭包 UNIX 有趣的一面是您几乎可以把任何东西看成是一个文件。文件本身、目录、管道、设备套接都被当作文件。这是新颖的抽象,意味着一整套的 API 可以用在广泛的设备类型上。...如果在一个套接上完成一个 read 操作并得到一个为 0 的返回值,这表明远程套接端的对等层调用了 close API 方法。...隐患 3.地址使用错误(EADDRINUSE) 您可以使用 bind API 函数来绑定一个地址(一个接口和一个端口)到一个套接端点。可以在服务器设置中使用这个函数,以便限制可能有连接到来的接口。...左边的对等层完成两个套接的写操作,每个 100 字节。协议栈的 UDP 层追踪写的数量,并确保当右边的接收者通过套接获取数据时,它以同样数量的字节到达。换句话说,为读者保留了写者提供的消息边界。...使用 netstat,可以查看当前活动的连接(按单个协议进行查看),查看特定状态的连接(比如处于监听状态的服务器套接)和许多其他的信息。

    82020

    linux网络编程之socket(八):五种IO模型和select函数简介

    2、非阻塞I/O 我们可以使用 fcntl(fd, F_SETFL, flag | O_NONBLOCK); 将套接标志变成非阻塞,调用recv,如果设备暂时没有数据可读就返回-1,同时置errno为...对等连接的写一半关闭。...即接收到FIN段,读操作将返回0 如果是监听套接口,已完成连接队列不为空时。 套接口上发生了一个错误待处理,错误可以通过getsockopt指定SO_ERROR选项来获取。...参数3:写集合,关心可写事件; 套接口发送缓冲区有空间容纳数据。(连接一旦建立就可写) 对等连接的读一半关闭。即收到RST段之后,再次调用write操作。...注意当select阻塞返回后,此时调用accept 接收连接是不会阻塞的,直接返回已连接套接,可以认为是select 提前阻塞了。

    1.9K00

    Py异常处理

    本文对Python异常处理进行讲解。 Python内置异常 Python的异常处理能力是很强大的,它有很多内置异常,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。...没有属性) | ±- UnboundLocalError # 访问未初始化的本地变量 ±- OSError # 操作系统错误,EnvironmentError,IOError,WindowsError,socket.error...| | ±- BrokenPipeError # 另一端关闭时尝试写入管道或试图在已关闭写入的套接上写入 | | ±- ConnectionAbortedError # 连接尝试被对等方中止 | |...±- ConnectionRefusedError # 连接尝试被对等方拒绝 | | ±- ConnectionResetError # 连接对等重置 | ±- FileExistsError #...此外,与python异常相关的关键主要有: ?

    1.5K30

    socket rst_socket通信编程

    client此时还是可以write 给server的,write调用只负责把数据交给TCP发送缓冲区就可以成功返回了,所以不会出错,而server收到数据后应答一个RST段,表示服务器已经不能接收数据,连接重置...54/* Connection reset by peer */ 当一个进程向某个已收到RST的套接执行读操作时,(此时读操作返回ECONNRESET错误) 抓包信息如下: 上述情况会引发一个问题...如果对端TCP发送一个FIN(对端进程终止),那么该套接变为可读,并且read返回0; 2....如果对端TCP发送一个RST(对端主机崩溃并重新启动),那么该套接变为可读,并且read返回-1,而errno中含有确切的错误码; 这个问题在select详解中讲述 情况三: 修改客户端程序如下,服务端不变...; 运行服务端,再运行客户端程序,客户端打印连接成功,if语句开头会休眠20秒,(服务端程序里面,接收一个连接以后就close套接然后立马退出程序了)在这期间内再次打开服务端,等待客户端的读取数据的分节到达

    1.7K30

    硬核干货:6000 30张图,带你彻底搞懂BGP动态路由!

    AS 101与AS 103建立了BGP对等体AS 103与AS 104建立了BGP对等体BGP 允许每个对等点从其相邻对等点收集路由信息,然后进一步完整地通告该信息。...假设位于中国的设备想要连接到位于俄罗斯的设备,中国端的设备订阅了网络自治号为101的 ISP 的服务,俄罗斯端的设备订阅了网络自治号为 104 的 ISP 的服务。...所以从中国端设备到俄罗斯端设备有两条路径:图片线路一:中国 -> AS 101 -> AS 102 -> AS 104 -> 俄罗斯线路二:中国 -> AS 101 -> AS 103 -> AS 104...如果成功,连接重置计时器将由已建立的 BGP 会话进程重置,并向邻居发送一个 OPEN 消息,并将进入 OpenSent 状态。如果失败,状态将继续到 Active 状态。...如果连接重置计时器归零并且 Connect 阶段尚未完成,则连接重置计时器将被重置并且 BGP 将尝试新的三次 TCP 握手。

    1.7K61

    linux网络编程之socket(十):shutdown 与 close 函数 的区别

    client此时还是可以write 给server的,write调用只负责把数据交给TCP发送缓冲区就可以成功返回了,所以不会出错,而server收到数据后应答一个RST段,表示服务器已经不能接收数据,连接重置...EOF字符(即发送了一个FIN段),而不管其他进程是否已经打开了这个套接。...也就是说只有当所有进程(可能fork多个子进程都打开了这个套接)都关闭了这个套接,close 才会发送FIN 段。...所以说,如果是调用shutdown how = 1 ,则意味着往一个已经发送出FIN的套接中写是允许的,接收到FIN段仅代表对方不再发送数据,但对方还是可以读取数据的,可以让对方可以继续读取缓冲区剩余的数据...再次发BBBBB直接产生SIGPIPE信号,默认会终止进程,但因为我们已经设置了忽略SIGPIPE信号,所以服务器端进程不会被终止,但客户端也会出错,因为回到while循环开头,select阻塞等待时发现套接的读端已经关闭

    3.1K00

    linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别

    listenfd 加入关心的套接序列。...当监听套接有可读事件,accept 返回的conn也需要使用epoll_ctl 函数将其加入关心的套接队列。...当下次循环回来某个已连接套接有可读事件,则读取数据,若read 返回0表示对方关闭,需要使用epoll_ctl 函数将conn 从队列中清除,我们使用 std::vector clients...,而此时客户端虽然已经创建了第1020个sock,但在connect 过程中发现对等方已经退出了,故打印错误提示,连接对等重置。...4、当已连接套接字数量不太大,并且这些套接都非常活跃,那么对于epoll 来说一直在调用callback 函数(epoll 内部的实现更复杂,更复杂的代码逻辑),可能性能没有poll 和 select

    2K00

    使用WebRTC开发Android Messenger:第2部分

    不幸的是,事实证明,此bug无法通过WebRTC访问,因为它需要客户端套接连接到侦听套接,而在WebRTC中,两个套接都是客户端套接。 我一直在寻找,最终找到了CVE-2020-6514。...结果是在每个SCTP连接期间,此对象在内存中的位置将发送到远程对等方。...重置序列号需要完全等于初始化连接时设置的序列号(在INIT或COOKIE_ECHO块中),还需要等于SctpTransport指针的低位四个字节。...ASLR布局是在Android设备启动时确定的,并且在重新启动之前不会再次更改。所以我需要一种方法在重置序列号被设置之后改变累积的TSN。...事实证明,使用FWD_TSN块类型是可行的,该类型允许一个对等方请求另一个对等方将其累积的TSN最多向前移动4096节。通过重复发送此块类型,可以将累积的TSN向前移动足够多的位,以使第31位翻转。

    1.6K43

    网络编程 - Linux Socket编程

    流式套接(SOCK_STREAM)   流式的套接可以提供可靠的、面向连接的通讯流。如果你通过流式套接发送了顺序的数据:"1"、"2"。那么数据到达远程时候的顺序也是"1"、"2"。...面向连接的Socket工作流程 数据报套接(SOCK_DGRAM)   数据报套接定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。...(Inet需要传入IP、端口;Unix 需要传入路径) connect()函数 —— 连接指定服务器套接。 listen()函数 —— 服务器监听连接上的套接客户端。...accept()函数 —— 接受远程客户端套接,会获取到远程连接客户端的地址信息。(阻塞接口) send()函数/recv()函数 —— 连接的流式套接进行通讯的函数。...sendto()函数/recvfrom()函数 —— 非连接的数据报套接进行通讯的函数。 close()函数 —— 关闭套接描述符所表示的连接

    9.7K50

    muduo网络库学习之EventLoop(三):Socket、Acceptor、TcpServer、TcpConnection(连接建立,接收消息)

    if (errno == EMFILE)         {             ::close(idleFd_);             idleFd_ = ::accept(acceptSocket...simba@ubuntu:~$  从输出可以看出,acceptSocket_.sockfd_ = 6,客户端连接上来,监听套接发生可读事件,调用accept() 接收连接后调用用户回调函数newConnection...listenAddr)),在构造函数体内: // Acceptor::handleRead函数中会回调用TcpServer::newConnection // _1对应的是socket文件描述符,_2对应的是对等方的地址...20131108 09:38:56.901306Z  7557 TRACE poll  nothing happended - EPollPoller.cc:74 可以看到,fd = 6 是监听套接...,fd = 8是返回来的已连接套接,那么fd = 7去哪了呢?

    1.3K00

    【重识云原生】第四章云网络4.3.7.3节——BGP协议实现原理

    Idle状态是BGP初始状态,在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。...说明:Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。...如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态; 如果TCP连接失败,那么BGP转至Active状态; 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么...如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态; 如果TCP连接失败,那么BGP停留在Active状态; 如果连接重传定时器超时,BGP仍没有收到...BGP 设备对等体建立邻居关系后,采取以下交互原则: 从 IBGP 对等体获得的 BGP 路由, BGP 设备只发布给它的 EBGP 对等体。

    89330

    Kali Linux 网络扫描秘籍 第四章 指纹识别(一)

    4.2 Python 套接特征抓取 Python套接字模块可以用于连接运行在远程端口上的网络服务。...操作步骤 使用 Python 交互式解释器,我们可以直接与远程网络设备交互。你可以通过 直接调用 Python 解释器来直接和它交互。这里,你可以导入任何打算使用的特定模块。这里我们导入套接字模块。...bangrab套接连接 Metasploitable2 远程主机172.16.36.135的 21 端口。连接后,recv函数可以用于从套接连接的服务接收内容。..._sock,name)(*args) socket.error: [Errno 111] Connection refused >>> exit() 如果我们尝试连接 Metasploitable2...执行过程中,这个脚本会使用 Python 套接连接所有远程系统的范围内的端口值。并且会收集和打印所有识别出的服务特征。

    1.6K30

    BGP篇

    BGP对等体关系建立 先启动BGP的一端先发起TCP连接,R1先启动BGP,R1使用随机端口号向R2的179端口发起TCP连接,完成TCP连接的建立。...BGP建立对等体的对等体都会发起TCP三次握手,所以会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router...2、路由刷新特性 Route refresh capability 对4节AS号的支持能力 Support for 4-octet AS number capability Open建立邻居前提 邻居地址的可达性...reset bgp all 直接断开所有TCP连接 清空所有BGP路由 重新建立邻居 BGP状态机 idel (空闲) 配置完BGP对等体之后,设备会尝试建立TCP连接,此时如果无法发起TCP...连接设备将会一直处于Idle状态。

    52710
    领券