[Python-checkins] CVS: python/dist/src/Lib/plat-win socket.py,1.6,1.7

Guido van Rossum guido@cnri.reston.va.us
Wed, 2 Feb 2000 11:57:34 -0500 (EST)


Update of /projects/cvsroot/python/dist/src/Lib/plat-win
In directory eric:/projects/python/develop/guido/src/Lib/plat-win

Modified Files:
	socket.py 
Log Message:
In _fileobject, optimize read() a bit (it could be really slow), and
remove "import string" -- use string methods instead!


Index: socket.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/plat-win/socket.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** socket.py	1998/05/06 13:48:04	1.6
--- socket.py	2000/02/02 16:57:32	1.7
***************
*** 97,125 ****
  	def read(self, n=-1):
  		if n >= 0:
! 			while len(self._rbuf) < n:
! 				new = self._sock.recv(self._rbufsize)
  				if not new: break
! 				self._rbuf = self._rbuf + new
! 			data, self._rbuf = self._rbuf[:n], self._rbuf[n:]
! 			return data
  		while 1:
! 			new = self._sock.recv(self._rbufsize)
  			if not new: break
! 			self._rbuf = self._rbuf + new
! 		data, self._rbuf = self._rbuf, ""
! 		return data
  
! 	def readline(self):
! 		import string
  		data = ""
! 		i = string.find(self._rbuf, '\n')
! 		while i < 0:
  			new = self._sock.recv(self._rbufsize)
  			if not new: break
! 			i = string.find(new, '\n')
  			if i >= 0: i = i + len(self._rbuf)
  			self._rbuf = self._rbuf + new
  		if i < 0: i = len(self._rbuf)
  		else: i = i+1
  		data, self._rbuf = self._rbuf[:i], self._rbuf[i:]
  		return data
--- 97,141 ----
  	def read(self, n=-1):
  		if n >= 0:
! 			k = len(self._rbuf)
! 			if n <= k:
! 				data = self._rbuf[:n]
! 				self._rbuf = self._rbuf[n:]
! 				return data
! 			n = n - k
! 			l = [self._rbuf]
! 			self._rbuf = ""
! 			while n > 0:
! 				new = self._sock.recv(max(n, self._rbufsize))
  				if not new: break
! 				k = len(new)
! 				if k > n:
! 					l.append(new[:n])
! 					self._rbuf = new[n:]
! 					break
! 				l.append(new)
! 				n = n - k
! 			return "".join(l)
! 		k = max(512, self._rbufsize)
! 		l = [self._rbuf]
! 		self._rbuf = ""
  		while 1:
! 			new = self._sock.recv(k)
  			if not new: break
! 			l.append(new)
! 			k = min(k*2, 1024**2)
! 		return "".join(l)
  
! 	def readline(self, limit=-1):
  		data = ""
! 		i = self._rbuf.find('\n')
! 		while i < 0 and not (0 < limit <= len(self._rbuf)):
  			new = self._sock.recv(self._rbufsize)
  			if not new: break
! 			i = new.find('\n')
  			if i >= 0: i = i + len(self._rbuf)
  			self._rbuf = self._rbuf + new
  		if i < 0: i = len(self._rbuf)
  		else: i = i+1
+ 		if 0 <= limit < len(self._rbuf): i = limit
  		data, self._rbuf = self._rbuf[:i], self._rbuf[i:]
  		return data