Ben*_*ash 10 python sockets udp
我正在玩Python并在给定端口上监听UDP数据包,一切似乎都运行良好 - 但是经过一段时间后,脚本崩溃并出现以下错误:
data = self._sock.recv(self._rbufsize)
socket.error: [Errno 54] Connection reset by peer
Run Code Online (Sandbox Code Playgroud)
仅重新启动脚本时,在较短的时间后再次发生同样的崩溃.重新启动服务器似乎再次彻底解决了问题.
关于套接字方面,我正在做:
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) )
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西,还是只是一种避免这种情况的简单方法?
提前感谢您可以放下任何光线!
石磊
Ode*_* R. 12
该错误"将连接复位"上的UDP套接字,意味着客户端已经接收一个ICMP错误消息(例如:端口不可达,TTL超过等)从服务器上它已发送的数据包.
我无法确定代码中导致这种情况的原因,但我可以提供两个想法:
SO_REUSEADDR
是导致问题的原因.此套接字选项允许您在同一端口上打开多个套接字.什么可能发生的,是一些其他进程正在尝试使用6000端口,成功(因为你告诉OS不要阻止它),你的插座是由OS关闭.由于我没有看到SO_REUSEADDR
在UDP套接字上使用的理由,我建议你删除该行sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
并再试一次.祝你好运!
归档时间: |
|
查看次数: |
19357 次 |
最近记录: |