[Python-checkins] python/dist/src/Lib socket.py,1.30,1.31
gvanrossum@users.sourceforge.net
gvanrossum@users.sourceforge.net
Thu, 08 Aug 2002 10:16:12 -0700
Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv13765
Modified Files:
socket.py
Log Message:
Another refactoring of read() and readline(), this time based on the
observation that _rbuf could never have more than one string in it.
So make _rbuf a string. The code branches for size<0 and size>=0
are completely separate now, both in read() and in readline().
I checked for tabs this time. :-)
Index: socket.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/socket.py,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -d -r1.30 -r1.31
*** socket.py 8 Aug 2002 15:25:28 -0000 1.30
--- socket.py 8 Aug 2002 17:16:09 -0000 1.31
***************
*** 211,217 ****
self._rbufsize = bufsize
self._wbufsize = bufsize
! # The buffers are lists of non-empty strings
! self._rbuf = []
! self._wbuf = []
def _getclosed(self):
--- 211,216 ----
self._rbufsize = bufsize
self._wbufsize = bufsize
! self._rbuf = "" # A string
! self._wbuf = [] # A list of strings
def _getclosed(self):
***************
*** 262,349 ****
return buf_len
- def _get_rbuf_len(self):
- buf_len = 0
- for x in self._rbuf:
- buf_len += len(x)
- return buf_len
-
def read(self, size=-1):
if size < 0:
# Read until EOF
if self._rbufsize <= 1:
recv_size = self.default_bufsize
else:
recv_size = self._rbufsize
! while 1:
data = self._sock.recv(recv_size)
if not data:
break
! self._rbuf.append(data)
else:
! buf_len = self._get_rbuf_len()
! while buf_len < size:
! recv_size = max(self._rbufsize, size - buf_len)
data = self._sock.recv(recv_size)
if not data:
break
! buf_len += len(data)
! self._rbuf.append(data)
! data = "".join(self._rbuf)
! self._rbuf = []
! if 0 <= size < buf_len:
! self._rbuf.append(data[size:])
! data = data[:size]
! return data
def readline(self, size=-1):
! data_len = 0
! for index, x in enumerate(self._rbuf):
! data_len += len(x)
! if '\n' in x or 0 <= size <= data_len:
! index += 1
! data = "".join(self._rbuf[:index])
! end = data.find('\n')
! if end < 0:
! end = len(data)
! else:
! end += 1
! if 0 <= size < end:
! end = size
! data, rest = data[:end], data[end:]
! if rest:
! self._rbuf[:index] = [rest]
! else:
! del self._rbuf[:index]
! return data
! recv_size = self._rbufsize
! while 1:
! if size >= 0:
! recv_size = min(self._rbufsize, size - data_len)
! x = self._sock.recv(recv_size)
! if not x:
! break
! data_len += len(x)
! self._rbuf.append(x)
! if '\n' in x or 0 <= size <= data_len:
! break
! data = "".join(self._rbuf)
! end = data.find('\n')
! if end < 0:
! end = len(data)
! else:
! end += 1
! if 0 <= size < end:
! end = size
! data, rest = data[:end], data[end:]
! if rest:
! self._rbuf = [rest]
else:
! self._rbuf = []
! return data
def readlines(self, sizehint=0):
total = 0
list = []
! while 1:
line = self.readline()
if not line:
--- 261,371 ----
return buf_len
def read(self, size=-1):
+ data = self._rbuf
if size < 0:
# Read until EOF
+ buffers = []
+ if data:
+ buffers.append(data)
+ self._rbuf = ""
if self._rbufsize <= 1:
recv_size = self.default_bufsize
else:
recv_size = self._rbufsize
! while True:
data = self._sock.recv(recv_size)
if not data:
break
! buffers.append(data)
! return "".join(buffers)
else:
! # Read until size bytes or EOF seen, whichever comes first
! buf_len = len(data)
! if buf_len >= size:
! self._rbuf = data[size:]
! return data[:size]
! buffers = []
! if data:
! buffers.append(data)
! self._rbuf = ""
! while True:
! left = size - buf_len
! recv_size = max(self._rbufsize, left)
data = self._sock.recv(recv_size)
if not data:
break
! buffers.append(data)
! n = len(data)
! if n >= left:
! self._rbuf = data[left:]
! buffers[-1] = data[:left]
! break
! buf_len += n
! return "".join(buffers)
def readline(self, size=-1):
! data = self._rbuf
! if size < 0:
! # Read until \n or EOF, whichever comes first
! nl = data.find('\n')
! if nl >= 0:
! nl += 1
! self._rbuf = data[nl:]
! return data[:nl]
! buffers = []
! if data:
! buffers.append(data)
! self._rbuf = ""
! while True:
! data = self._sock.recv(self._rbufsize)
! if not data:
! break
! buffers.append(data)
! nl = data.find('\n')
! if nl >= 0:
! nl += 1
! self._rbuf = data[nl:]
! buffers[-1] = data[:nl]
! break
! return "".join(buffers)
else:
! # Read until size bytes or \n or EOF seen, whichever comes first
! nl = data.find('\n', 0, size)
! if nl >= 0:
! nl += 1
! self._rbuf = data[nl:]
! return data[:nl]
! buf_len = len(data)
! if buf_len >= size:
! self._rbuf = data[size:]
! return data[:size]
! buffers = []
! if data:
! buffers.append(data)
! self._rbuf = ""
! while True:
! data = self._sock.recv(self._rbufsize)
! if not data:
! break
! buffers.append(data)
! left = size - buf_len
! nl = data.find('\n', 0, left)
! if nl >= 0:
! nl += 1
! self._rbuf = data[nl:]
! buffers[-1] = data[:nl]
! break
! n = len(data)
! if n >= left:
! self._rbuf = data[left:]
! buffers[-1] = data[:left]
! break
! buf_len += n
! return "".join(buffers)
def readlines(self, sizehint=0):
total = 0
list = []
! while True:
line = self.readline()
if not line: