def _handle(self, client, address):
"Client handle function"
async.Greenlet._reset_locals(gevent.getcurrent())
log.d("Client connected", str(address))
handler = ClientHandler(client, address)
self._clients.add(handler)
try:
buffer = b''
while True:
data, eof = utils.end_of_message(buffer)
if eof:
buffer = data[1]
log.d("Received", sys.getsizeof(buffer), "bytes from ", address)
if handler.is_active():
client_msg = handler.advance(data[0]) # noqa: F841
else:
log.d("Client has disconnected", address)
break
else:
log.d("Received data, EOF not reached. Waiting for more data from ", address)
utils.switch(constants.Priority.High)
r = client.recv(constants.data_size)
if not r:
log.d("Client has disconnected", address)
break
else:
buffer += r
except socket.error as e:
log.exception("Client disconnected with error", e)
finally:
self._clients.remove(handler)
log.d("Client disconnected", str(address))
评论列表
文章目录