blob: 7f5a91e22c44bbc0897fbabb465e9851b1b4b6e0 [file] [log] [blame]
Fred Drakea6070f02000-08-16 14:14:32 +00001# Wrapper module for _socket, providing some additional facilities
2# implemented in Python.
3
4"""\
5This module provides socket operations and some related functions.
6On Unix, it supports IP (Internet Protocol) and Unix domain sockets.
Tim Peters495ad3c2001-01-15 01:36:40 +00007On other systems, it only supports IP. Functions specific for a
Martin v. Löwisaf484d52000-09-30 11:34:30 +00008socket are available as methods of the socket object.
Fred Drakea6070f02000-08-16 14:14:32 +00009
10Functions:
11
12socket() -- create a new socket object
Dave Cole331708b2004-08-09 04:51:41 +000013socketpair() -- create a pair of new socket objects [*]
Fred Drakea6070f02000-08-16 14:14:32 +000014fromfd() -- create a socket object from an open file descriptor [*]
15gethostname() -- return the current hostname
16gethostbyname() -- map a hostname to its IP number
17gethostbyaddr() -- map an IP number or hostname to DNS info
18getservbyname() -- map a service name and a protocol name to a port number
19getprotobyname() -- mape a protocol name (e.g. 'tcp') to a number
20ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order
21htons(), htonl() -- convert 16, 32 bit int from host to network byte order
22inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format
23inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
24ssl() -- secure socket layer support (only available if configured)
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +000025socket.getdefaulttimeout() -- get the default timeout value
26socket.setdefaulttimeout() -- set the default timeout value
Fred Drakea6070f02000-08-16 14:14:32 +000027
28 [*] not available on all platforms!
29
30Special objects:
31
32SocketType -- type object for socket objects
33error -- exception raised for I/O errors
Guido van Rossum47dfa4a2003-04-25 05:48:32 +000034has_ipv6 -- boolean value indicating if IPv6 is supported
Fred Drakea6070f02000-08-16 14:14:32 +000035
36Integer constants:
37
38AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
39SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
40
41Many other constants may be defined; these may be used in calls to
42the setsockopt() and getsockopt() methods.
43"""
44
Tim Peters18e67782002-02-17 04:25:24 +000045import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000046from _socket import *
Tim Peters18e67782002-02-17 04:25:24 +000047
Guido van Rossumc18993f2002-08-08 15:16:20 +000048_have_ssl = False
Marc-André Lemburga5d2b4c2002-02-16 18:23:30 +000049try:
Guido van Rossumde7cade2002-08-08 15:25:28 +000050 import _ssl
Marc-André Lemburga5d2b4c2002-02-16 18:23:30 +000051 from _ssl import *
Guido van Rossumc18993f2002-08-08 15:16:20 +000052 _have_ssl = True
Marc-André Lemburga5d2b4c2002-02-16 18:23:30 +000053except ImportError:
Guido van Rossumc18993f2002-08-08 15:16:20 +000054 pass
Fred Drakea6070f02000-08-16 14:14:32 +000055
56import os, sys
57
Fred Drake70d566b2003-04-29 19:50:25 +000058try:
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +000059 from cStringIO import StringIO
60except ImportError:
61 from StringIO import StringIO
62
63try:
Fred Drake70d566b2003-04-29 19:50:25 +000064 from errno import EBADF
65except ImportError:
66 EBADF = 9
67
Skip Montanaro0de65802001-02-15 22:15:14 +000068__all__ = ["getfqdn"]
Skip Montanaro0de65802001-02-15 22:15:14 +000069__all__.extend(os._get_exports_list(_socket))
Guido van Rossumde7cade2002-08-08 15:25:28 +000070if _have_ssl:
71 __all__.extend(os._get_exports_list(_ssl))
Skip Montanaro0de65802001-02-15 22:15:14 +000072
Guido van Rossumc18993f2002-08-08 15:16:20 +000073_realsocket = socket
Martin v. Löwis1867f242003-06-14 13:30:53 +000074if _have_ssl:
75 _realssl = ssl
76 def ssl(sock, keyfile=None, certfile=None):
77 if hasattr(sock, "_sock"):
78 sock = sock._sock
79 return _realssl(sock, keyfile, certfile)
Fred Drakea6070f02000-08-16 14:14:32 +000080
81# WSA error codes
82if sys.platform.lower().startswith("win"):
83 errorTab = {}
84 errorTab[10004] = "The operation was interrupted."
85 errorTab[10009] = "A bad file handle was passed."
86 errorTab[10013] = "Permission denied."
87 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
88 errorTab[10022] = "An invalid operation was attempted."
89 errorTab[10035] = "The socket operation would block"
90 errorTab[10036] = "A blocking operation is already in progress."
91 errorTab[10048] = "The network address is in use."
92 errorTab[10054] = "The connection has been reset."
93 errorTab[10058] = "The network has been shut down."
94 errorTab[10060] = "The operation timed out."
95 errorTab[10061] = "Connection refused."
96 errorTab[10063] = "The name is too long."
97 errorTab[10064] = "The host is down."
98 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +000099 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000100
Fred Drakea6070f02000-08-16 14:14:32 +0000101
102
103def getfqdn(name=''):
104 """Get fully qualified domain name from name.
105
106 An empty argument is interpreted as meaning the local host.
107
108 First the hostname returned by gethostbyaddr() is checked, then
109 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000110 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000111 """
112 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000113 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000114 name = gethostname()
115 try:
116 hostname, aliases, ipaddrs = gethostbyaddr(name)
117 except error:
118 pass
119 else:
120 aliases.insert(0, hostname)
121 for name in aliases:
122 if '.' in name:
123 break
124 else:
125 name = hostname
126 return name
127
128
Guido van Rossume5e50592001-08-18 01:23:20 +0000129_socketmethods = (
130 'bind', 'connect', 'connect_ex', 'fileno', 'listen',
131 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
Skip Montanaroc6899182003-04-29 19:27:26 +0000132 'sendall', 'setblocking',
Guido van Rossum67f7a382002-06-06 21:08:16 +0000133 'settimeout', 'gettimeout', 'shutdown')
Guido van Rossume5e50592001-08-18 01:23:20 +0000134
Martin v. Löwisa94568a2003-05-10 07:36:56 +0000135if sys.platform == "riscos":
136 _socketmethods = _socketmethods + ('sleeptaskw',)
137
Martin v. Löwis7596e832006-07-01 15:33:37 +0000138# All the method names that must be delegated to either the real socket
139# object or the _closedsocket object.
140_delegate_methods = ("recv", "recvfrom", "recv_into", "recvfrom_into",
141 "send", "sendto")
142
Guido van Rossum715f9702002-08-08 18:11:36 +0000143class _closedsocket(object):
144 __slots__ = []
Skip Montanaroc6899182003-04-29 19:27:26 +0000145 def _dummy(*args):
Fred Drake70d566b2003-04-29 19:50:25 +0000146 raise error(EBADF, 'Bad file descriptor')
Martin v. Löwis7596e832006-07-01 15:33:37 +0000147 # All _delegate_methods must also be initialized here.
148 send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy
149 __getattr__ = _dummy
Guido van Rossum715f9702002-08-08 18:11:36 +0000150
Guido van Rossumc18993f2002-08-08 15:16:20 +0000151class _socketobject(object):
Fred Drakea6070f02000-08-16 14:14:32 +0000152
Guido van Rossumc18993f2002-08-08 15:16:20 +0000153 __doc__ = _realsocket.__doc__
154
Martin v. Löwis7596e832006-07-01 15:33:37 +0000155 __slots__ = ["_sock", "__weakref__"] + list(_delegate_methods)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000156
Guido van Rossumc18993f2002-08-08 15:16:20 +0000157 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, _sock=None):
158 if _sock is None:
Guido van Rossum7c3b6342002-08-08 15:22:12 +0000159 _sock = _realsocket(family, type, proto)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000160 self._sock = _sock
Martin v. Löwis7596e832006-07-01 15:33:37 +0000161 for method in _delegate_methods:
162 setattr(self, method, getattr(_sock, method))
Fred Drakea6070f02000-08-16 14:14:32 +0000163
164 def close(self):
Guido van Rossum715f9702002-08-08 18:11:36 +0000165 self._sock = _closedsocket()
Martin v. Löwis7596e832006-07-01 15:33:37 +0000166 dummy = self._sock._dummy
167 for method in _delegate_methods:
168 setattr(self, method, dummy)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000169 close.__doc__ = _realsocket.close.__doc__
Fred Drakea6070f02000-08-16 14:14:32 +0000170
Fred Drakea6070f02000-08-16 14:14:32 +0000171 def accept(self):
172 sock, addr = self._sock.accept()
Guido van Rossumc18993f2002-08-08 15:16:20 +0000173 return _socketobject(_sock=sock), addr
174 accept.__doc__ = _realsocket.accept.__doc__
Fred Drakea6070f02000-08-16 14:14:32 +0000175
176 def dup(self):
Guido van Rossumc18993f2002-08-08 15:16:20 +0000177 """dup() -> socket object
178
179 Return a new socket object connected to the same system resource."""
180 return _socketobject(_sock=self._sock)
Fred Drakea6070f02000-08-16 14:14:32 +0000181
182 def makefile(self, mode='r', bufsize=-1):
Guido van Rossumc18993f2002-08-08 15:16:20 +0000183 """makefile([mode[, bufsize]]) -> file object
184
185 Return a regular file object corresponding to the socket. The mode
186 and bufsize arguments are as for the built-in open() function."""
Fred Drakea6070f02000-08-16 14:14:32 +0000187 return _fileobject(self._sock, mode, bufsize)
Tim Peters0ae07bd2006-03-22 03:23:21 +0000188
Georg Brandlbb03ac02006-03-21 18:17:25 +0000189 family = property(lambda self: self._sock.family, doc="the socket family")
190 type = property(lambda self: self._sock.type, doc="the socket type")
191 proto = property(lambda self: self._sock.proto, doc="the socket protocol")
Georg Brandlbc45a3f2006-03-17 19:17:34 +0000192
Guido van Rossumc18993f2002-08-08 15:16:20 +0000193 _s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
194 "%s.__doc__ = _realsocket.%s.__doc__\n")
Guido van Rossume5e50592001-08-18 01:23:20 +0000195 for _m in _socketmethods:
Guido van Rossumc18993f2002-08-08 15:16:20 +0000196 exec _s % (_m, _m, _m, _m)
Tim Petersd7e8a0d2002-08-08 20:07:03 +0000197 del _m, _s
Fred Drakea6070f02000-08-16 14:14:32 +0000198
Skip Montanaro89feabc2003-03-30 04:54:24 +0000199socket = SocketType = _socketobject
Fred Drakea6070f02000-08-16 14:14:32 +0000200
Guido van Rossumc18993f2002-08-08 15:16:20 +0000201class _fileobject(object):
Guido van Rossum443fec32002-08-08 01:02:16 +0000202 """Faux file object attached to a socket object."""
203
204 default_bufsize = 8192
Guido van Rossumc18993f2002-08-08 15:16:20 +0000205 name = "<socket>"
206
207 __slots__ = ["mode", "bufsize", "softspace",
208 # "closed" is a property, see below
Georg Brandl962e9162007-01-21 10:35:14 +0000209 "_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf",
210 "_close"]
Fred Drakea6070f02000-08-16 14:14:32 +0000211
Georg Brandl962e9162007-01-21 10:35:14 +0000212 def __init__(self, sock, mode='rb', bufsize=-1, close=False):
Fred Drakea6070f02000-08-16 14:14:32 +0000213 self._sock = sock
Guido van Rossumc18993f2002-08-08 15:16:20 +0000214 self.mode = mode # Not actually used in this version
Guido van Rossum443fec32002-08-08 01:02:16 +0000215 if bufsize < 0:
216 bufsize = self.default_bufsize
Guido van Rossum7c3b6342002-08-08 15:22:12 +0000217 self.bufsize = bufsize
218 self.softspace = False
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000219 # _rbufsize is the suggested recv buffer size. It is *strictly*
220 # obeyed within readline() for recv calls. If it is larger than
221 # default_bufsize it will be used for recv calls within read().
Guido van Rossum443fec32002-08-08 01:02:16 +0000222 if bufsize == 0:
223 self._rbufsize = 1
224 elif bufsize == 1:
225 self._rbufsize = self.default_bufsize
226 else:
227 self._rbufsize = bufsize
Fred Drakea6070f02000-08-16 14:14:32 +0000228 self._wbufsize = bufsize
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000229 # We use StringIO for the read buffer to avoid holding a list
230 # of variously sized string objects which have been known to
231 # fragment the heap due to how they are malloc()ed and often
232 # realloc()ed down much smaller than their original allocation.
233 self._rbuf = StringIO()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000234 self._wbuf = [] # A list of strings
Georg Brandl962e9162007-01-21 10:35:14 +0000235 self._close = close
Fred Drakea6070f02000-08-16 14:14:32 +0000236
Guido van Rossumc18993f2002-08-08 15:16:20 +0000237 def _getclosed(self):
Tim Peters116d83c2004-03-28 02:20:45 +0000238 return self._sock is None
Guido van Rossumc18993f2002-08-08 15:16:20 +0000239 closed = property(_getclosed, doc="True if the file is closed")
240
Fred Drakea6070f02000-08-16 14:14:32 +0000241 def close(self):
242 try:
243 if self._sock:
244 self.flush()
245 finally:
Georg Brandl962e9162007-01-21 10:35:14 +0000246 if self._close:
247 self._sock.close()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000248 self._sock = None
Fred Drakea6070f02000-08-16 14:14:32 +0000249
250 def __del__(self):
Guido van Rossum65f8ced2003-05-29 14:36:57 +0000251 try:
252 self.close()
253 except:
254 # close() may fail if __init__ didn't complete
255 pass
Fred Drakea6070f02000-08-16 14:14:32 +0000256
257 def flush(self):
258 if self._wbuf:
Guido van Rossum443fec32002-08-08 01:02:16 +0000259 buffer = "".join(self._wbuf)
260 self._wbuf = []
Guido van Rossum67f7a382002-06-06 21:08:16 +0000261 self._sock.sendall(buffer)
Fred Drakea6070f02000-08-16 14:14:32 +0000262
Neal Norwitz2b342902002-06-13 22:18:39 +0000263 def fileno(self):
Fred Drakea6070f02000-08-16 14:14:32 +0000264 return self._sock.fileno()
265
266 def write(self, data):
Guido van Rossum443fec32002-08-08 01:02:16 +0000267 data = str(data) # XXX Should really reject non-string non-buffers
268 if not data:
269 return
270 self._wbuf.append(data)
271 if (self._wbufsize == 0 or
272 self._wbufsize == 1 and '\n' in data or
273 self._get_wbuf_len() >= self._wbufsize):
Guido van Rossum67f7a382002-06-06 21:08:16 +0000274 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000275
276 def writelines(self, list):
Guido van Rossum443fec32002-08-08 01:02:16 +0000277 # XXX We could do better here for very long lists
278 # XXX Should really reject non-string non-buffers
279 self._wbuf.extend(filter(None, map(str, list)))
280 if (self._wbufsize <= 1 or
281 self._get_wbuf_len() >= self._wbufsize):
282 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000283
Guido van Rossum443fec32002-08-08 01:02:16 +0000284 def _get_wbuf_len(self):
Guido van Rossum67f7a382002-06-06 21:08:16 +0000285 buf_len = 0
Guido van Rossum443fec32002-08-08 01:02:16 +0000286 for x in self._wbuf:
287 buf_len += len(x)
Guido van Rossum67f7a382002-06-06 21:08:16 +0000288 return buf_len
Fred Drakea6070f02000-08-16 14:14:32 +0000289
Guido van Rossum67f7a382002-06-06 21:08:16 +0000290 def read(self, size=-1):
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000291 # Use max, disallow tiny reads in a loop as they are very inefficient.
292 # We never leave read() with any leftover data from a new recv() call
293 # in our internal buffer.
294 rbufsize = max(self._rbufsize, self.default_bufsize)
295 # Our use of StringIO rather than lists of string objects returned by
296 # recv() minimizes memory usage and fragmentation that occurs when
297 # rbufsize is large compared to the typical return value of recv().
298 buf = self._rbuf
299 buf.seek(0, 2) # seek end
Guido van Rossum443fec32002-08-08 01:02:16 +0000300 if size < 0:
301 # Read until EOF
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000302 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000303 while True:
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000304 data = self._sock.recv(rbufsize)
Guido van Rossum443fec32002-08-08 01:02:16 +0000305 if not data:
306 break
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000307 buf.write(data)
308 return buf.getvalue()
Guido van Rossum443fec32002-08-08 01:02:16 +0000309 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000310 # Read until size bytes or EOF seen, whichever comes first
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000311 buf_len = buf.tell()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000312 if buf_len >= size:
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000313 # Already have size bytes in our buffer? Extract and return.
314 buf.seek(0)
315 rv = buf.read(size)
316 self._rbuf = StringIO()
317 self._rbuf.write(buf.read())
318 return rv
319
320 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000321 while True:
322 left = size - buf_len
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000323 # recv() will malloc the amount of memory given as its
324 # parameter even though it often returns much less data
325 # than that. The returned data string is short lived
326 # as we copy it into a StringIO and free it. This avoids
327 # fragmentation issues on many platforms.
328 data = self._sock.recv(left)
Guido van Rossum443fec32002-08-08 01:02:16 +0000329 if not data:
330 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000331 n = len(data)
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000332 if n == size and not buf_len:
333 # Shortcut. Avoid buffer data copies when:
334 # - We have no data in our buffer.
335 # AND
336 # - Our call to recv returned exactly the
337 # number of bytes we were asked to read.
338 return data
339 if n == left:
340 buf.write(data)
341 del data # explicit free
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000342 break
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000343 assert n <= left, "recv(%d) returned %d bytes" % (left, n)
344 buf.write(data)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000345 buf_len += n
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000346 del data # explicit free
347 #assert buf_len == buf.tell()
348 return buf.getvalue()
Fred Drakea6070f02000-08-16 14:14:32 +0000349
Guido van Rossum67f7a382002-06-06 21:08:16 +0000350 def readline(self, size=-1):
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000351 buf = self._rbuf
352 buf.seek(0, 2) # seek end
353 if buf.tell() > 0:
354 # check if we already have it in our buffer
355 buf.seek(0)
356 bline = buf.readline(size)
357 if bline.endswith('\n') or len(bline) == size:
358 self._rbuf = StringIO()
359 self._rbuf.write(buf.read())
360 return bline
361 del bline
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000362 if size < 0:
363 # Read until \n or EOF, whichever comes first
Guido van Rossum48b79692002-08-08 17:34:19 +0000364 if self._rbufsize <= 1:
365 # Speed up unbuffered case
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000366 buf.seek(0)
367 buffers = [buf.read()]
368 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
369 data = None
Guido van Rossum48b79692002-08-08 17:34:19 +0000370 recv = self._sock.recv
371 while data != "\n":
372 data = recv(1)
373 if not data:
374 break
375 buffers.append(data)
376 return "".join(buffers)
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000377
378 buf.seek(0, 2) # seek end
379 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000380 while True:
381 data = self._sock.recv(self._rbufsize)
382 if not data:
383 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000384 nl = data.find('\n')
385 if nl >= 0:
386 nl += 1
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000387 buf.write(buffer(data, 0, nl))
388 self._rbuf.write(buffer(data, nl))
389 del data
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000390 break
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000391 buf.write(data)
392 return buf.getvalue()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000393 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000394 # Read until size bytes or \n or EOF seen, whichever comes first
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000395 buf.seek(0, 2) # seek end
396 buf_len = buf.tell()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000397 if buf_len >= size:
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000398 buf.seek(0)
399 rv = buf.read(size)
400 self._rbuf = StringIO()
401 self._rbuf.write(buf.read())
402 return rv
403 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000404 while True:
405 data = self._sock.recv(self._rbufsize)
406 if not data:
407 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000408 left = size - buf_len
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000409 # did we just receive a newline?
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000410 nl = data.find('\n', 0, left)
411 if nl >= 0:
412 nl += 1
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000413 # save the excess data to _rbuf
414 self._rbuf.write(buffer(data, nl))
415 if buf_len:
416 buf.write(buffer(data, 0, nl))
417 break
418 else:
419 # Shortcut. Avoid data copy through buf when returning
420 # a substring of our first recv().
421 return data[:nl]
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000422 n = len(data)
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000423 if n == size and not buf_len:
424 # Shortcut. Avoid data copy through buf when
425 # returning exactly all of our first recv().
426 return data
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000427 if n >= left:
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000428 buf.write(buffer(data, 0, left))
429 self._rbuf.write(buffer(data, left))
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000430 break
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000431 buf.write(data)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000432 buf_len += n
Gregory P. Smithf8f30fa2008-07-06 04:04:07 +0000433 #assert buf_len == buf.tell()
434 return buf.getvalue()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000435
436 def readlines(self, sizehint=0):
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000437 total = 0
Fred Drakea6070f02000-08-16 14:14:32 +0000438 list = []
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000439 while True:
Fred Drakea6070f02000-08-16 14:14:32 +0000440 line = self.readline()
Neal Norwitz2b342902002-06-13 22:18:39 +0000441 if not line:
442 break
Fred Drakea6070f02000-08-16 14:14:32 +0000443 list.append(line)
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000444 total += len(line)
445 if sizehint and total >= sizehint:
446 break
Fred Drakea6070f02000-08-16 14:14:32 +0000447 return list
Guido van Rossum443fec32002-08-08 01:02:16 +0000448
449 # Iterator protocols
450
451 def __iter__(self):
452 return self
453
454 def next(self):
455 line = self.readline()
456 if not line:
457 raise StopIteration
458 return line