blob: 596e30cc4dc56fc9694e463b35b8a0a8ccef279d [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
Mark Dickinson36c80842009-06-02 07:40:15 +000019getprotobyname() -- map a protocol name (e.g. 'tcp') to a number
Fred Drakea6070f02000-08-16 14:14:32 +000020ntohs(), 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
Neal Norwitz0d4c06e2007-04-25 06:30:05 +000027create_connection() -- connects to an address, with an optional timeout
Fred Drakea6070f02000-08-16 14:14:32 +000028
29 [*] not available on all platforms!
30
31Special objects:
32
33SocketType -- type object for socket objects
34error -- exception raised for I/O errors
Guido van Rossum47dfa4a2003-04-25 05:48:32 +000035has_ipv6 -- boolean value indicating if IPv6 is supported
Fred Drakea6070f02000-08-16 14:14:32 +000036
37Integer constants:
38
39AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
40SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
41
42Many other constants may be defined; these may be used in calls to
43the setsockopt() and getsockopt() methods.
44"""
45
Tim Peters18e67782002-02-17 04:25:24 +000046import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000047from _socket import *
Tim Peters18e67782002-02-17 04:25:24 +000048
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 +000051except ImportError:
Bill Janssen426ea0a2007-08-29 22:35:05 +000052 # no SSL support
Guido van Rossumc18993f2002-08-08 15:16:20 +000053 pass
Bill Janssen426ea0a2007-08-29 22:35:05 +000054else:
55 def ssl(sock, keyfile=None, certfile=None):
56 # we do an internal import here because the ssl
57 # module imports the socket module
58 import ssl as _realssl
Bill Janssen98d19da2007-09-10 21:51:02 +000059 warnings.warn("socket.ssl() is deprecated. Use ssl.wrap_socket() instead.",
Bill Janssen426ea0a2007-08-29 22:35:05 +000060 DeprecationWarning, stacklevel=2)
61 return _realssl.sslwrap_simple(sock, keyfile, certfile)
Fred Drakea6070f02000-08-16 14:14:32 +000062
Bill Janssen426ea0a2007-08-29 22:35:05 +000063 # we need to import the same constants we used to...
Bill Janssen98d19da2007-09-10 21:51:02 +000064 from _ssl import SSLError as sslerror
Bill Janssen426ea0a2007-08-29 22:35:05 +000065 from _ssl import \
Bill Janssen426ea0a2007-08-29 22:35:05 +000066 RAND_add, \
67 RAND_egd, \
68 RAND_status, \
69 SSL_ERROR_ZERO_RETURN, \
70 SSL_ERROR_WANT_READ, \
71 SSL_ERROR_WANT_WRITE, \
72 SSL_ERROR_WANT_X509_LOOKUP, \
73 SSL_ERROR_SYSCALL, \
74 SSL_ERROR_SSL, \
75 SSL_ERROR_WANT_CONNECT, \
76 SSL_ERROR_EOF, \
77 SSL_ERROR_INVALID_ERROR_CODE
78
79import os, sys, warnings
Fred Drakea6070f02000-08-16 14:14:32 +000080
Fred Drake70d566b2003-04-29 19:50:25 +000081try:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +000082 from cStringIO import StringIO
83except ImportError:
84 from StringIO import StringIO
85
86try:
Fred Drake70d566b2003-04-29 19:50:25 +000087 from errno import EBADF
88except ImportError:
89 EBADF = 9
90
Benjamin Peterson2b485732009-04-06 22:11:57 +000091__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000092__all__.extend(os._get_exports_list(_socket))
Bill Janssen426ea0a2007-08-29 22:35:05 +000093
Skip Montanaro0de65802001-02-15 22:15:14 +000094
Guido van Rossumc18993f2002-08-08 15:16:20 +000095_realsocket = socket
Fred Drakea6070f02000-08-16 14:14:32 +000096
97# WSA error codes
98if sys.platform.lower().startswith("win"):
99 errorTab = {}
100 errorTab[10004] = "The operation was interrupted."
101 errorTab[10009] = "A bad file handle was passed."
102 errorTab[10013] = "Permission denied."
103 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
104 errorTab[10022] = "An invalid operation was attempted."
105 errorTab[10035] = "The socket operation would block"
106 errorTab[10036] = "A blocking operation is already in progress."
107 errorTab[10048] = "The network address is in use."
108 errorTab[10054] = "The connection has been reset."
109 errorTab[10058] = "The network has been shut down."
110 errorTab[10060] = "The operation timed out."
111 errorTab[10061] = "Connection refused."
112 errorTab[10063] = "The name is too long."
113 errorTab[10064] = "The host is down."
114 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000115 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000116
Fred Drakea6070f02000-08-16 14:14:32 +0000117
118
119def getfqdn(name=''):
120 """Get fully qualified domain name from name.
121
122 An empty argument is interpreted as meaning the local host.
123
124 First the hostname returned by gethostbyaddr() is checked, then
125 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000126 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000127 """
128 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000129 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000130 name = gethostname()
131 try:
132 hostname, aliases, ipaddrs = gethostbyaddr(name)
133 except error:
134 pass
135 else:
136 aliases.insert(0, hostname)
137 for name in aliases:
138 if '.' in name:
139 break
140 else:
141 name = hostname
142 return name
143
144
Guido van Rossume5e50592001-08-18 01:23:20 +0000145_socketmethods = (
146 'bind', 'connect', 'connect_ex', 'fileno', 'listen',
147 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
Skip Montanaroc6899182003-04-29 19:27:26 +0000148 'sendall', 'setblocking',
Christian Heimesa47b75b2008-01-04 15:48:06 +0000149 'settimeout', 'gettimeout', 'shutdown')
150
151if os.name == "nt":
152 _socketmethods = _socketmethods + ('ioctl',)
Guido van Rossume5e50592001-08-18 01:23:20 +0000153
Martin v. Löwisa94568a2003-05-10 07:36:56 +0000154if sys.platform == "riscos":
155 _socketmethods = _socketmethods + ('sleeptaskw',)
156
Martin v. Löwis7596e832006-07-01 15:33:37 +0000157# All the method names that must be delegated to either the real socket
158# object or the _closedsocket object.
159_delegate_methods = ("recv", "recvfrom", "recv_into", "recvfrom_into",
160 "send", "sendto")
161
Guido van Rossum715f9702002-08-08 18:11:36 +0000162class _closedsocket(object):
163 __slots__ = []
Skip Montanaroc6899182003-04-29 19:27:26 +0000164 def _dummy(*args):
Fred Drake70d566b2003-04-29 19:50:25 +0000165 raise error(EBADF, 'Bad file descriptor')
Martin v. Löwis7596e832006-07-01 15:33:37 +0000166 # All _delegate_methods must also be initialized here.
167 send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy
168 __getattr__ = _dummy
Guido van Rossum715f9702002-08-08 18:11:36 +0000169
Martin v. Löwisf25e35b2007-07-27 18:28:22 +0000170# Wrapper around platform socket objects. This implements
171# a platform-independent dup() functionality. The
172# implementation currently relies on reference counting
173# to close the underlying socket object.
Guido van Rossumc18993f2002-08-08 15:16:20 +0000174class _socketobject(object):
Fred Drakea6070f02000-08-16 14:14:32 +0000175
Guido van Rossumc18993f2002-08-08 15:16:20 +0000176 __doc__ = _realsocket.__doc__
177
Martin v. Löwis7596e832006-07-01 15:33:37 +0000178 __slots__ = ["_sock", "__weakref__"] + list(_delegate_methods)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000179
Guido van Rossumc18993f2002-08-08 15:16:20 +0000180 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, _sock=None):
181 if _sock is None:
Guido van Rossum7c3b6342002-08-08 15:22:12 +0000182 _sock = _realsocket(family, type, proto)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000183 self._sock = _sock
Martin v. Löwis7596e832006-07-01 15:33:37 +0000184 for method in _delegate_methods:
185 setattr(self, method, getattr(_sock, method))
Fred Drakea6070f02000-08-16 14:14:32 +0000186
187 def close(self):
Guido van Rossum715f9702002-08-08 18:11:36 +0000188 self._sock = _closedsocket()
Martin v. Löwis7596e832006-07-01 15:33:37 +0000189 dummy = self._sock._dummy
190 for method in _delegate_methods:
191 setattr(self, method, dummy)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000192 close.__doc__ = _realsocket.close.__doc__
Fred Drakea6070f02000-08-16 14:14:32 +0000193
Fred Drakea6070f02000-08-16 14:14:32 +0000194 def accept(self):
195 sock, addr = self._sock.accept()
Guido van Rossumc18993f2002-08-08 15:16:20 +0000196 return _socketobject(_sock=sock), addr
197 accept.__doc__ = _realsocket.accept.__doc__
Fred Drakea6070f02000-08-16 14:14:32 +0000198
199 def dup(self):
Guido van Rossumc18993f2002-08-08 15:16:20 +0000200 """dup() -> socket object
201
202 Return a new socket object connected to the same system resource."""
203 return _socketobject(_sock=self._sock)
Fred Drakea6070f02000-08-16 14:14:32 +0000204
205 def makefile(self, mode='r', bufsize=-1):
Guido van Rossumc18993f2002-08-08 15:16:20 +0000206 """makefile([mode[, bufsize]]) -> file object
207
208 Return a regular file object corresponding to the socket. The mode
209 and bufsize arguments are as for the built-in open() function."""
Fred Drakea6070f02000-08-16 14:14:32 +0000210 return _fileobject(self._sock, mode, bufsize)
Tim Peters0ae07bd2006-03-22 03:23:21 +0000211
Georg Brandlbb03ac02006-03-21 18:17:25 +0000212 family = property(lambda self: self._sock.family, doc="the socket family")
213 type = property(lambda self: self._sock.type, doc="the socket type")
214 proto = property(lambda self: self._sock.proto, doc="the socket protocol")
Georg Brandlbc45a3f2006-03-17 19:17:34 +0000215
Guido van Rossumc18993f2002-08-08 15:16:20 +0000216 _s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
217 "%s.__doc__ = _realsocket.%s.__doc__\n")
Guido van Rossume5e50592001-08-18 01:23:20 +0000218 for _m in _socketmethods:
Guido van Rossumc18993f2002-08-08 15:16:20 +0000219 exec _s % (_m, _m, _m, _m)
Tim Petersd7e8a0d2002-08-08 20:07:03 +0000220 del _m, _s
Fred Drakea6070f02000-08-16 14:14:32 +0000221
Skip Montanaro89feabc2003-03-30 04:54:24 +0000222socket = SocketType = _socketobject
Fred Drakea6070f02000-08-16 14:14:32 +0000223
Guido van Rossumc18993f2002-08-08 15:16:20 +0000224class _fileobject(object):
Guido van Rossum443fec32002-08-08 01:02:16 +0000225 """Faux file object attached to a socket object."""
226
227 default_bufsize = 8192
Guido van Rossumc18993f2002-08-08 15:16:20 +0000228 name = "<socket>"
229
230 __slots__ = ["mode", "bufsize", "softspace",
231 # "closed" is a property, see below
Gregory P. Smith1cfc9c02009-08-15 06:40:49 +0000232 "_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf", "_wbuf_len",
Georg Brandldd7b0522007-01-21 10:35:10 +0000233 "_close"]
Fred Drakea6070f02000-08-16 14:14:32 +0000234
Georg Brandldd7b0522007-01-21 10:35:10 +0000235 def __init__(self, sock, mode='rb', bufsize=-1, close=False):
Fred Drakea6070f02000-08-16 14:14:32 +0000236 self._sock = sock
Guido van Rossumc18993f2002-08-08 15:16:20 +0000237 self.mode = mode # Not actually used in this version
Guido van Rossum443fec32002-08-08 01:02:16 +0000238 if bufsize < 0:
239 bufsize = self.default_bufsize
Guido van Rossum7c3b6342002-08-08 15:22:12 +0000240 self.bufsize = bufsize
241 self.softspace = False
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000242 # _rbufsize is the suggested recv buffer size. It is *strictly*
243 # obeyed within readline() for recv calls. If it is larger than
244 # default_bufsize it will be used for recv calls within read().
Guido van Rossum443fec32002-08-08 01:02:16 +0000245 if bufsize == 0:
246 self._rbufsize = 1
247 elif bufsize == 1:
248 self._rbufsize = self.default_bufsize
249 else:
250 self._rbufsize = bufsize
Fred Drakea6070f02000-08-16 14:14:32 +0000251 self._wbufsize = bufsize
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000252 # We use StringIO for the read buffer to avoid holding a list
253 # of variously sized string objects which have been known to
254 # fragment the heap due to how they are malloc()ed and often
255 # realloc()ed down much smaller than their original allocation.
256 self._rbuf = StringIO()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000257 self._wbuf = [] # A list of strings
Gregory P. Smith1cfc9c02009-08-15 06:40:49 +0000258 self._wbuf_len = 0
Georg Brandldd7b0522007-01-21 10:35:10 +0000259 self._close = close
Fred Drakea6070f02000-08-16 14:14:32 +0000260
Guido van Rossumc18993f2002-08-08 15:16:20 +0000261 def _getclosed(self):
Tim Peters116d83c2004-03-28 02:20:45 +0000262 return self._sock is None
Guido van Rossumc18993f2002-08-08 15:16:20 +0000263 closed = property(_getclosed, doc="True if the file is closed")
264
Fred Drakea6070f02000-08-16 14:14:32 +0000265 def close(self):
266 try:
267 if self._sock:
268 self.flush()
269 finally:
Georg Brandldd7b0522007-01-21 10:35:10 +0000270 if self._close:
271 self._sock.close()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000272 self._sock = None
Fred Drakea6070f02000-08-16 14:14:32 +0000273
274 def __del__(self):
Guido van Rossum65f8ced2003-05-29 14:36:57 +0000275 try:
276 self.close()
277 except:
278 # close() may fail if __init__ didn't complete
279 pass
Fred Drakea6070f02000-08-16 14:14:32 +0000280
281 def flush(self):
282 if self._wbuf:
Guido van Rossum443fec32002-08-08 01:02:16 +0000283 buffer = "".join(self._wbuf)
284 self._wbuf = []
Gregory P. Smith1cfc9c02009-08-15 06:40:49 +0000285 self._wbuf_len = 0
Guido van Rossum67f7a382002-06-06 21:08:16 +0000286 self._sock.sendall(buffer)
Fred Drakea6070f02000-08-16 14:14:32 +0000287
Neal Norwitz2b342902002-06-13 22:18:39 +0000288 def fileno(self):
Fred Drakea6070f02000-08-16 14:14:32 +0000289 return self._sock.fileno()
290
291 def write(self, data):
Guido van Rossum443fec32002-08-08 01:02:16 +0000292 data = str(data) # XXX Should really reject non-string non-buffers
293 if not data:
294 return
295 self._wbuf.append(data)
Gregory P. Smith1cfc9c02009-08-15 06:40:49 +0000296 self._wbuf_len += len(data)
Guido van Rossum443fec32002-08-08 01:02:16 +0000297 if (self._wbufsize == 0 or
298 self._wbufsize == 1 and '\n' in data or
Gregory P. Smith1cfc9c02009-08-15 06:40:49 +0000299 self._wbuf_len >= self._wbufsize):
Guido van Rossum67f7a382002-06-06 21:08:16 +0000300 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000301
302 def writelines(self, list):
Guido van Rossum443fec32002-08-08 01:02:16 +0000303 # XXX We could do better here for very long lists
304 # XXX Should really reject non-string non-buffers
Gregory P. Smith1cfc9c02009-08-15 06:40:49 +0000305 lines = filter(None, map(str, list))
306 self._wbuf_len += sum(map(len, lines))
307 self._wbuf.extend(lines)
Guido van Rossum443fec32002-08-08 01:02:16 +0000308 if (self._wbufsize <= 1 or
Gregory P. Smith1cfc9c02009-08-15 06:40:49 +0000309 self._wbuf_len >= self._wbufsize):
Guido van Rossum443fec32002-08-08 01:02:16 +0000310 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000311
Guido van Rossum443fec32002-08-08 01:02:16 +0000312 def _get_wbuf_len(self):
Gregory P. Smith1cfc9c02009-08-15 06:40:49 +0000313 return self._wbuf_len
Fred Drakea6070f02000-08-16 14:14:32 +0000314
Guido van Rossum67f7a382002-06-06 21:08:16 +0000315 def read(self, size=-1):
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000316 # Use max, disallow tiny reads in a loop as they are very inefficient.
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000317 # We never leave read() with any leftover data from a new recv() call
318 # in our internal buffer.
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000319 rbufsize = max(self._rbufsize, self.default_bufsize)
320 # Our use of StringIO rather than lists of string objects returned by
321 # recv() minimizes memory usage and fragmentation that occurs when
322 # rbufsize is large compared to the typical return value of recv().
323 buf = self._rbuf
324 buf.seek(0, 2) # seek end
Guido van Rossum443fec32002-08-08 01:02:16 +0000325 if size < 0:
326 # Read until EOF
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000327 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000328 while True:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000329 data = self._sock.recv(rbufsize)
Guido van Rossum443fec32002-08-08 01:02:16 +0000330 if not data:
331 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000332 buf.write(data)
333 return buf.getvalue()
Guido van Rossum443fec32002-08-08 01:02:16 +0000334 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000335 # Read until size bytes or EOF seen, whichever comes first
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000336 buf_len = buf.tell()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000337 if buf_len >= size:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000338 # Already have size bytes in our buffer? Extract and return.
339 buf.seek(0)
340 rv = buf.read(size)
341 self._rbuf = StringIO()
342 self._rbuf.write(buf.read())
343 return rv
344
345 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000346 while True:
347 left = size - buf_len
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000348 # recv() will malloc the amount of memory given as its
349 # parameter even though it often returns much less data
350 # than that. The returned data string is short lived
351 # as we copy it into a StringIO and free it. This avoids
352 # fragmentation issues on many platforms.
353 data = self._sock.recv(left)
Guido van Rossum443fec32002-08-08 01:02:16 +0000354 if not data:
355 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000356 n = len(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000357 if n == size and not buf_len:
358 # Shortcut. Avoid buffer data copies when:
359 # - We have no data in our buffer.
360 # AND
361 # - Our call to recv returned exactly the
362 # number of bytes we were asked to read.
363 return data
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000364 if n == left:
365 buf.write(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000366 del data # explicit free
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000367 break
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000368 assert n <= left, "recv(%d) returned %d bytes" % (left, n)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000369 buf.write(data)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000370 buf_len += n
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000371 del data # explicit free
372 #assert buf_len == buf.tell()
373 return buf.getvalue()
Fred Drakea6070f02000-08-16 14:14:32 +0000374
Guido van Rossum67f7a382002-06-06 21:08:16 +0000375 def readline(self, size=-1):
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000376 buf = self._rbuf
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000377 buf.seek(0, 2) # seek end
378 if buf.tell() > 0:
379 # check if we already have it in our buffer
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000380 buf.seek(0)
381 bline = buf.readline(size)
382 if bline.endswith('\n') or len(bline) == size:
383 self._rbuf = StringIO()
384 self._rbuf.write(buf.read())
385 return bline
386 del bline
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000387 if size < 0:
388 # Read until \n or EOF, whichever comes first
Guido van Rossum48b79692002-08-08 17:34:19 +0000389 if self._rbufsize <= 1:
390 # Speed up unbuffered case
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000391 buf.seek(0)
392 buffers = [buf.read()]
393 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000394 data = None
Guido van Rossum48b79692002-08-08 17:34:19 +0000395 recv = self._sock.recv
396 while data != "\n":
397 data = recv(1)
398 if not data:
399 break
400 buffers.append(data)
401 return "".join(buffers)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000402
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000403 buf.seek(0, 2) # seek end
404 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000405 while True:
406 data = self._sock.recv(self._rbufsize)
407 if not data:
408 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000409 nl = data.find('\n')
410 if nl >= 0:
411 nl += 1
Brett Cannon3f92bc62008-08-08 04:27:28 +0000412 buf.write(data[:nl])
413 self._rbuf.write(data[nl:])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000414 del data
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000415 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000416 buf.write(data)
417 return buf.getvalue()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000418 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000419 # Read until size bytes or \n or EOF seen, whichever comes first
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000420 buf.seek(0, 2) # seek end
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000421 buf_len = buf.tell()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000422 if buf_len >= size:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000423 buf.seek(0)
424 rv = buf.read(size)
425 self._rbuf = StringIO()
426 self._rbuf.write(buf.read())
427 return rv
428 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000429 while True:
430 data = self._sock.recv(self._rbufsize)
431 if not data:
432 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000433 left = size - buf_len
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000434 # did we just receive a newline?
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000435 nl = data.find('\n', 0, left)
436 if nl >= 0:
437 nl += 1
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000438 # save the excess data to _rbuf
Brett Cannon3f92bc62008-08-08 04:27:28 +0000439 self._rbuf.write(data[nl:])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000440 if buf_len:
Brett Cannon3f92bc62008-08-08 04:27:28 +0000441 buf.write(data[:nl])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000442 break
443 else:
444 # Shortcut. Avoid data copy through buf when returning
445 # a substring of our first recv().
446 return data[:nl]
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000447 n = len(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000448 if n == size and not buf_len:
449 # Shortcut. Avoid data copy through buf when
450 # returning exactly all of our first recv().
451 return data
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000452 if n >= left:
Brett Cannon3f92bc62008-08-08 04:27:28 +0000453 buf.write(data[:left])
454 self._rbuf.write(data[left:])
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000455 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000456 buf.write(data)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000457 buf_len += n
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000458 #assert buf_len == buf.tell()
459 return buf.getvalue()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000460
461 def readlines(self, sizehint=0):
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000462 total = 0
Fred Drakea6070f02000-08-16 14:14:32 +0000463 list = []
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000464 while True:
Fred Drakea6070f02000-08-16 14:14:32 +0000465 line = self.readline()
Neal Norwitz2b342902002-06-13 22:18:39 +0000466 if not line:
467 break
Fred Drakea6070f02000-08-16 14:14:32 +0000468 list.append(line)
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000469 total += len(line)
470 if sizehint and total >= sizehint:
471 break
Fred Drakea6070f02000-08-16 14:14:32 +0000472 return list
Guido van Rossum443fec32002-08-08 01:02:16 +0000473
474 # Iterator protocols
475
476 def __iter__(self):
477 return self
478
479 def next(self):
480 line = self.readline()
481 if not line:
482 raise StopIteration
483 return line
Facundo Batista07c78be2007-03-23 18:54:07 +0000484
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000485_GLOBAL_DEFAULT_TIMEOUT = object()
Facundo Batista07c78be2007-03-23 18:54:07 +0000486
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000487def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT):
488 """Connect to *address* and return the socket object.
Facundo Batista07c78be2007-03-23 18:54:07 +0000489
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000490 Convenience function. Connect to *address* (a 2-tuple ``(host,
491 port)``) and return the socket object. Passing the optional
492 *timeout* parameter will set the timeout on the socket instance
493 before attempting to connect. If no *timeout* is supplied, the
494 global default timeout setting returned by :func:`getdefaulttimeout`
495 is used.
Facundo Batista07c78be2007-03-23 18:54:07 +0000496 """
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000497
Facundo Batista07c78be2007-03-23 18:54:07 +0000498 msg = "getaddrinfo returns an empty list"
499 host, port = address
500 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
501 af, socktype, proto, canonname, sa = res
502 sock = None
503 try:
504 sock = socket(af, socktype, proto)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000505 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Facundo Batista07c78be2007-03-23 18:54:07 +0000506 sock.settimeout(timeout)
507 sock.connect(sa)
508 return sock
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000509
Facundo Batista07c78be2007-03-23 18:54:07 +0000510 except error, msg:
511 if sock is not None:
512 sock.close()
513
514 raise error, msg