Python套接字被绞死-有时(客户端与flash连接)-Python 3.2
我在Python(3.2)中体验到套接字的奇怪行为。客户端使用Flash连接到我的应用程序。大多数时候没有什么不寻常的事情,但有时python会以一种本不应该发生的方式崩溃——进入无限循环。下面我附加到日志中的循环代码和错误消息。Python挂起Python套接字被绞死-有时(客户端与flash连接)-Python 3.2,python,flash,sockets,Python,Flash,Sockets,我在Python(3.2)中体验到套接字的奇怪行为。客户端使用Flash连接到我的应用程序。大多数时候没有什么不寻常的事情,但有时python会以一种本不应该发生的方式崩溃——进入无限循环。下面我附加到日志中的循环代码和错误消息。Python挂起bytesRecived=sock.recv(64)并接收b''开关,该开关在日志中可见 代码: python的socket模块与BSD套接字API非常匹配 当套接字的远程端(这里是flash客户端)关闭时,本地端(这里是python服务器)上的recv
bytesRecived=sock.recv(64)
并接收b''
开关,该开关在日志中可见
代码:
python的
socket
模块与BSD套接字API非常匹配
当套接字的远程端(这里是flash客户端)关闭时,本地端(这里是python服务器)上的recv()
调用将返回一个空字符串('
)。无需继续处理,因为客户端将不再发送任何内容:通道已关闭
另一方面,由于套接字是非阻塞的,如果由于客户端在指定的时间限制(10秒)内未发送任何数据而发生套接字超时,则recv()
调用将引发socket.timeout
异常,您可以捕获并相应地处理该异常
您应该在recv()
调用之后添加一个测试:
bytesRecived = sock.recv(64)
if not len(bytesRecived):
raise InvalidSessionException('connection reset')
现在,我意识到有时候在我设置套接字超时之前,客户端可以断开连接。我想是这样的。你的解决办法会解决问题的。谢谢
CRITICAL: Hanged! buff='' bytes=[b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b'', b''] timeout=10.0
bytesRecived = sock.recv(64)
if not len(bytesRecived):
raise InvalidSessionException('connection reset')