我正在玩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) )
我是否遗漏了一些明显的东西,或者只是一种避免这种情况的简单方法?
提前感谢您可以放下任何光线!
畚箕
答案 0 :(得分:9)
错误"由对等方重置连接"在UDP套接字上,表示客户端已在其发送的数据包上收到来自服务器的ICMP错误消息(例如:端口不可达,TTL超出等)。
我无法确定代码中导致此问题的原因,但我可以提供两个想法:
SO_REUSEADDR
导致问题。此套接字选项允许您在同一端口上打开多个套接字。 可能发生的是,其他一些进程正在尝试使用端口6000,成功(因为您告诉操作系统不要阻止它),并且您的套接字由操作系统关闭。由于我没有看到在UDP套接字上使用SO_REUSEADDR
的原因,我建议您删除该行sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
并重试。祝你好运!