def handle_read(self): data = self.recv(8192) if not data: return self.in_buffer += data while True: try: func, args, cmd_len = parse_command(self.in_buffer, response=False) except ProtocolError, exc: logging.error("[%s] ProtocolError: %s" % (self.addr, str(exc))) self.close() return if not func: break self.handle_command(func, args) self.in_buffer = buffer(self.in_buffer, cmd_len)
if exc.args[0] == errno.EWOULDBLOCK: return if exc.args[0] == errno.ECONNRESET: data = None else: raise if not data: self.mark_dead() raise self.ConnectionError("connection died") self.in_buffer += data commands = [] while len(self.in_buffer) >= 12: func, args, cmd_len = parse_command(self.in_buffer) if not cmd_len: break commands.append((func, args)) self.in_buffer = buffer(self.in_buffer, cmd_len) return commands def send(self): assert self.connected if len(self.out_buffer) == 0: return 0 try: