Python'连接重置由同行'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python'连接重置由同行'相关的知识,希望对你有一定的参考价值。

我正在玩Python并在给定端口上监听UDP数据包,一切似乎都运行良好 - 但是经过一段时间后,脚本崩溃并出现以下错误:

data = self._sock.recv(self._rbufsize)
socket.error: [Errno 54] Connection reset by peer

只重新启动脚本时,在较短的时间后再次发生同样的崩溃。重新启动服务器似乎再次彻底解决了问题。

关于套接字方面,我正在做:

UDP_IP = "0.0.0.0"
UDP_PORT = 6000

sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind( (UDP_IP, UDP_PORT) )

我错过了一些明显的东西,还是只是一种避免这种情况的简单方法?

提前感谢您可以放下任何光线!

Benji

答案

UDP套接字上的“由对等方重置连接”错误表示客户端已从其发送的数据包收到来自服务器的ICMP错误消息(例如:端口不可达,TTL超出等)。

我无法确定代码中导致这种情况的原因,但我可以提供两个想法:

  1. 连接确实被某些东西打断了(路由问题,服务器端故障等)。在这种情况下,您可以检查此错误,如果发生这种错误,您可以重新打开套接字。
  2. 对我来说似乎更有可能,但我不太熟悉,是因为SO_REUSEADDR造成了这个问题。此套接字选项允许您在同一端口上打开多个套接字。可能发生的是,其他一些进程正在尝试使用端口6000,成功(因为您告诉操作系统不要阻止它),并且您的套接字被操作系统关闭。由于我没有看到在UDP套接字上使用SO_REUSEADDR的原因,我建议你删除行sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)并再试一次。

祝你好运!

以上是关于Python'连接重置由同行'的主要内容,如果未能解决你的问题,请参考以下文章

CoreData崩溃“无法在绑定{}中获取'批处理'的值。”重置NSManagedObjectContext时

200. 岛屿数量(Python)

在 Python 中使用 Twitch IRC 时“由对等方重置连接”

mysql错误代码1045 是为啥

Python 处理 socket.error:[Errno 104] 连接由对等方重置

python连接MySQL