Я испытываю странное поведение сокетов в Python (3.2).Клиент подключается к моему приложению с помощью Flash.В большинстве случаев в этом нет ничего необычного, но иногда происходит сбой питона, который не должен был происходить - входить в бесконечные циклы.Ниже я прилагаю к циклу код и сообщение об ошибке в журнале.Python зависает на bytesRecived = sock.recv(64)
и получает b''
ведьму, видимую в журнале.
код:
try:
buff = ''
allBytesRecived = []
timeout = sock.gettimeout()
sock.settimeout(10.0)
tries = 0
while len(buff) < 64 and tries < 64:
tries += 1
bytesRecived = sock.recv(64)
allBytesRecived.append(bytesRecived)
comm = str(bytesRecived, config.encoding)
buff += comm
#flash connection and his strage security policy
if buff[:24] == config.flash.policy_request:
cross = open(config.flash.crossdomain,'rb').read()
cross+=b'\x00' #end string
sock.send(cross);
raise FlashCrossdomainException()
if len(buff) < 64:
logger.critical('Hanged! buff=%s bytes=%s timeout=%s' % (repr(buff), repr(allBytesRecived), repr(sock.gettimeout())))
raise InvalidSessionException('Unknown error')
sock.settimeout(timeout)
except FlashCrossdomainException as e:
raise e
except socket.timeout:
raise InvalidSessionException('Timeout on signing in to system')
except socket.error as e:
logger.exception(e)
raise InvalidSessionException('Unknown IO error')
except Exception as e:
logger.exception(e)
raise InvalidSessionException('Unknown error')
ошибка журнала:
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