--- /home/yo/tmp/python-memcached-1.31/memcache.py 2006-05-20 23:18:03.000000000 +0200 +++ memcache.py 2006-07-30 15:12:37.688974383 +0200 @@ -467,6 +467,8 @@ self.deaduntil = 0 self.socket = None + self.buffer = '' + def _check_dead(self): if self.deaduntil and self.deaduntil > time.time(): return 1 @@ -496,6 +498,7 @@ self.mark_dead("connect: %s" % msg[1]) return None self.socket = s + self.buffer = '' return s def close_socket(self): @@ -507,18 +510,24 @@ self.socket.sendall(cmd + '\r\n') def readline(self): - buffers = '' + buf = self.buffer recv = self.socket.recv - while 1: - data = recv(1) + while True: + index = buf.find('\r\n') + if index >= 0: + break + data = recv(4096) if not data: self.mark_dead('Connection closed while reading from %s' % repr(self)) break - if data == '\n' and buffers and buffers[-1] == '\r': - return(buffers[:-1]) - buffers = buffers + data - return(buffers) + buf += data + if index >= 0: + self.buffer = buf[index+2:] + buf = buf[:index] + else: + self.buffer = '' + return buf def expect(self, text): line = self.readline() @@ -527,11 +536,12 @@ return line def recv(self, rlen): - buf = '' recv = self.socket.recv + buf = self.buffer while len(buf) < rlen: - buf = buf + recv(rlen - len(buf)) - return buf + buf += recv(4096) + self.buffer = buf[rlen:] + return buf[:rlen] def __str__(self): d = ''