blob: 9b4bedaafbede063a6fb7288d4db2c71cf150c78 [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 Dickinsond57b5542009-06-02 07:39:26 +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
Gregory P. Smith79a3eb12010-01-03 01:29:44 +000027create_connection() -- connects to an address, with an optional timeout and
28 optional source address.
Fred Drakea6070f02000-08-16 14:14:32 +000029
30 [*] not available on all platforms!
31
32Special objects:
33
34SocketType -- type object for socket objects
35error -- exception raised for I/O errors
Guido van Rossum47dfa4a2003-04-25 05:48:32 +000036has_ipv6 -- boolean value indicating if IPv6 is supported
Fred Drakea6070f02000-08-16 14:14:32 +000037
38Integer constants:
39
40AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
41SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
42
43Many other constants may be defined; these may be used in calls to
44the setsockopt() and getsockopt() methods.
45"""
46
Tim Peters18e67782002-02-17 04:25:24 +000047import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000048from _socket import *
Chris Withersb5248252009-04-11 11:22:19 +000049from functools import partial
Antoine Pitroudaa524a2009-10-14 18:27:32 +000050from types import MethodType
Tim Peters18e67782002-02-17 04:25:24 +000051
Marc-André Lemburga5d2b4c2002-02-16 18:23:30 +000052try:
Guido van Rossumde7cade2002-08-08 15:25:28 +000053 import _ssl
Marc-André Lemburga5d2b4c2002-02-16 18:23:30 +000054except ImportError:
Bill Janssen426ea0a2007-08-29 22:35:05 +000055 # no SSL support
Guido van Rossumc18993f2002-08-08 15:16:20 +000056 pass
Bill Janssen426ea0a2007-08-29 22:35:05 +000057else:
58 def ssl(sock, keyfile=None, certfile=None):
59 # we do an internal import here because the ssl
60 # module imports the socket module
61 import ssl as _realssl
Bill Janssen98d19da2007-09-10 21:51:02 +000062 warnings.warn("socket.ssl() is deprecated. Use ssl.wrap_socket() instead.",
Bill Janssen426ea0a2007-08-29 22:35:05 +000063 DeprecationWarning, stacklevel=2)
64 return _realssl.sslwrap_simple(sock, keyfile, certfile)
Fred Drakea6070f02000-08-16 14:14:32 +000065
Bill Janssen426ea0a2007-08-29 22:35:05 +000066 # we need to import the same constants we used to...
Bill Janssen98d19da2007-09-10 21:51:02 +000067 from _ssl import SSLError as sslerror
Bill Janssen426ea0a2007-08-29 22:35:05 +000068 from _ssl import \
Bill Janssen426ea0a2007-08-29 22:35:05 +000069 RAND_add, \
70 RAND_egd, \
71 RAND_status, \
72 SSL_ERROR_ZERO_RETURN, \
73 SSL_ERROR_WANT_READ, \
74 SSL_ERROR_WANT_WRITE, \
75 SSL_ERROR_WANT_X509_LOOKUP, \
76 SSL_ERROR_SYSCALL, \
77 SSL_ERROR_SSL, \
78 SSL_ERROR_WANT_CONNECT, \
79 SSL_ERROR_EOF, \
80 SSL_ERROR_INVALID_ERROR_CODE
81
82import os, sys, warnings
Fred Drakea6070f02000-08-16 14:14:32 +000083
Fred Drake70d566b2003-04-29 19:50:25 +000084try:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +000085 from cStringIO import StringIO
86except ImportError:
87 from StringIO import StringIO
88
89try:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +000090 import errno
Fred Drake70d566b2003-04-29 19:50:25 +000091except ImportError:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +000092 errno = None
93EBADF = getattr(errno, 'EBADF', 9)
94EINTR = getattr(errno, 'EINTR', 4)
Fred Drake70d566b2003-04-29 19:50:25 +000095
Benjamin Petersona27e6e32009-04-06 21:53:33 +000096__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000097__all__.extend(os._get_exports_list(_socket))
Bill Janssen426ea0a2007-08-29 22:35:05 +000098
Skip Montanaro0de65802001-02-15 22:15:14 +000099
Guido van Rossumc18993f2002-08-08 15:16:20 +0000100_realsocket = socket
Fred Drakea6070f02000-08-16 14:14:32 +0000101
102# WSA error codes
103if sys.platform.lower().startswith("win"):
104 errorTab = {}
105 errorTab[10004] = "The operation was interrupted."
106 errorTab[10009] = "A bad file handle was passed."
107 errorTab[10013] = "Permission denied."
108 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
109 errorTab[10022] = "An invalid operation was attempted."
110 errorTab[10035] = "The socket operation would block"
111 errorTab[10036] = "A blocking operation is already in progress."
112 errorTab[10048] = "The network address is in use."
113 errorTab[10054] = "The connection has been reset."
114 errorTab[10058] = "The network has been shut down."
115 errorTab[10060] = "The operation timed out."
116 errorTab[10061] = "Connection refused."
117 errorTab[10063] = "The name is too long."
118 errorTab[10064] = "The host is down."
119 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000120 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000121
Fred Drakea6070f02000-08-16 14:14:32 +0000122
123
124def getfqdn(name=''):
125 """Get fully qualified domain name from name.
126
127 An empty argument is interpreted as meaning the local host.
128
129 First the hostname returned by gethostbyaddr() is checked, then
130 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000131 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000132 """
133 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000134 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000135 name = gethostname()
136 try:
137 hostname, aliases, ipaddrs = gethostbyaddr(name)
138 except error:
139 pass
140 else:
141 aliases.insert(0, hostname)
142 for name in aliases:
143 if '.' in name:
144 break
145 else:
146 name = hostname
147 return name
148
149
Guido van Rossume5e50592001-08-18 01:23:20 +0000150_socketmethods = (
151 'bind', 'connect', 'connect_ex', 'fileno', 'listen',
152 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
Skip Montanaroc6899182003-04-29 19:27:26 +0000153 'sendall', 'setblocking',
Christian Heimesa47b75b2008-01-04 15:48:06 +0000154 'settimeout', 'gettimeout', 'shutdown')
155
156if os.name == "nt":
157 _socketmethods = _socketmethods + ('ioctl',)
Guido van Rossume5e50592001-08-18 01:23:20 +0000158
Martin v. Löwisa94568a2003-05-10 07:36:56 +0000159if sys.platform == "riscos":
160 _socketmethods = _socketmethods + ('sleeptaskw',)
161
Martin v. Löwis7596e832006-07-01 15:33:37 +0000162# All the method names that must be delegated to either the real socket
163# object or the _closedsocket object.
164_delegate_methods = ("recv", "recvfrom", "recv_into", "recvfrom_into",
165 "send", "sendto")
166
Guido van Rossum715f9702002-08-08 18:11:36 +0000167class _closedsocket(object):
168 __slots__ = []
Skip Montanaroc6899182003-04-29 19:27:26 +0000169 def _dummy(*args):
Fred Drake70d566b2003-04-29 19:50:25 +0000170 raise error(EBADF, 'Bad file descriptor')
Martin v. Löwis7596e832006-07-01 15:33:37 +0000171 # All _delegate_methods must also be initialized here.
172 send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy
173 __getattr__ = _dummy
Guido van Rossum715f9702002-08-08 18:11:36 +0000174
Martin v. Löwisf25e35b2007-07-27 18:28:22 +0000175# Wrapper around platform socket objects. This implements
176# a platform-independent dup() functionality. The
177# implementation currently relies on reference counting
178# to close the underlying socket object.
Guido van Rossumc18993f2002-08-08 15:16:20 +0000179class _socketobject(object):
Fred Drakea6070f02000-08-16 14:14:32 +0000180
Guido van Rossumc18993f2002-08-08 15:16:20 +0000181 __doc__ = _realsocket.__doc__
182
Martin v. Löwis7596e832006-07-01 15:33:37 +0000183 __slots__ = ["_sock", "__weakref__"] + list(_delegate_methods)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000184
Guido van Rossumc18993f2002-08-08 15:16:20 +0000185 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, _sock=None):
186 if _sock is None:
Guido van Rossum7c3b6342002-08-08 15:22:12 +0000187 _sock = _realsocket(family, type, proto)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000188 self._sock = _sock
Martin v. Löwis7596e832006-07-01 15:33:37 +0000189 for method in _delegate_methods:
190 setattr(self, method, getattr(_sock, method))
Fred Drakea6070f02000-08-16 14:14:32 +0000191
192 def close(self):
Guido van Rossum715f9702002-08-08 18:11:36 +0000193 self._sock = _closedsocket()
Martin v. Löwis7596e832006-07-01 15:33:37 +0000194 dummy = self._sock._dummy
195 for method in _delegate_methods:
196 setattr(self, method, dummy)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000197 close.__doc__ = _realsocket.close.__doc__
Fred Drakea6070f02000-08-16 14:14:32 +0000198
Fred Drakea6070f02000-08-16 14:14:32 +0000199 def accept(self):
200 sock, addr = self._sock.accept()
Guido van Rossumc18993f2002-08-08 15:16:20 +0000201 return _socketobject(_sock=sock), addr
202 accept.__doc__ = _realsocket.accept.__doc__
Fred Drakea6070f02000-08-16 14:14:32 +0000203
204 def dup(self):
Guido van Rossumc18993f2002-08-08 15:16:20 +0000205 """dup() -> socket object
206
207 Return a new socket object connected to the same system resource."""
208 return _socketobject(_sock=self._sock)
Fred Drakea6070f02000-08-16 14:14:32 +0000209
210 def makefile(self, mode='r', bufsize=-1):
Guido van Rossumc18993f2002-08-08 15:16:20 +0000211 """makefile([mode[, bufsize]]) -> file object
212
213 Return a regular file object corresponding to the socket. The mode
214 and bufsize arguments are as for the built-in open() function."""
Fred Drakea6070f02000-08-16 14:14:32 +0000215 return _fileobject(self._sock, mode, bufsize)
Tim Peters0ae07bd2006-03-22 03:23:21 +0000216
Georg Brandlbb03ac02006-03-21 18:17:25 +0000217 family = property(lambda self: self._sock.family, doc="the socket family")
218 type = property(lambda self: self._sock.type, doc="the socket type")
219 proto = property(lambda self: self._sock.proto, doc="the socket protocol")
Georg Brandlbc45a3f2006-03-17 19:17:34 +0000220
Chris Withersb5248252009-04-11 11:22:19 +0000221def meth(name,self,*args):
222 return getattr(self._sock,name)(*args)
223
224for _m in _socketmethods:
225 p = partial(meth,_m)
226 p.__name__ = _m
227 p.__doc__ = getattr(_realsocket,_m).__doc__
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000228 m = MethodType(p,None,_socketobject)
Chris Withersb5248252009-04-11 11:22:19 +0000229 setattr(_socketobject,_m,m)
Fred Drakea6070f02000-08-16 14:14:32 +0000230
Skip Montanaro89feabc2003-03-30 04:54:24 +0000231socket = SocketType = _socketobject
Fred Drakea6070f02000-08-16 14:14:32 +0000232
Guido van Rossumc18993f2002-08-08 15:16:20 +0000233class _fileobject(object):
Guido van Rossum443fec32002-08-08 01:02:16 +0000234 """Faux file object attached to a socket object."""
235
236 default_bufsize = 8192
Guido van Rossumc18993f2002-08-08 15:16:20 +0000237 name = "<socket>"
238
239 __slots__ = ["mode", "bufsize", "softspace",
240 # "closed" is a property, see below
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000241 "_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf", "_wbuf_len",
Georg Brandldd7b0522007-01-21 10:35:10 +0000242 "_close"]
Fred Drakea6070f02000-08-16 14:14:32 +0000243
Georg Brandldd7b0522007-01-21 10:35:10 +0000244 def __init__(self, sock, mode='rb', bufsize=-1, close=False):
Fred Drakea6070f02000-08-16 14:14:32 +0000245 self._sock = sock
Guido van Rossumc18993f2002-08-08 15:16:20 +0000246 self.mode = mode # Not actually used in this version
Guido van Rossum443fec32002-08-08 01:02:16 +0000247 if bufsize < 0:
248 bufsize = self.default_bufsize
Guido van Rossum7c3b6342002-08-08 15:22:12 +0000249 self.bufsize = bufsize
250 self.softspace = False
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000251 # _rbufsize is the suggested recv buffer size. It is *strictly*
252 # obeyed within readline() for recv calls. If it is larger than
253 # default_bufsize it will be used for recv calls within read().
Guido van Rossum443fec32002-08-08 01:02:16 +0000254 if bufsize == 0:
255 self._rbufsize = 1
256 elif bufsize == 1:
257 self._rbufsize = self.default_bufsize
258 else:
259 self._rbufsize = bufsize
Fred Drakea6070f02000-08-16 14:14:32 +0000260 self._wbufsize = bufsize
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000261 # We use StringIO for the read buffer to avoid holding a list
262 # of variously sized string objects which have been known to
263 # fragment the heap due to how they are malloc()ed and often
264 # realloc()ed down much smaller than their original allocation.
265 self._rbuf = StringIO()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000266 self._wbuf = [] # A list of strings
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000267 self._wbuf_len = 0
Georg Brandldd7b0522007-01-21 10:35:10 +0000268 self._close = close
Fred Drakea6070f02000-08-16 14:14:32 +0000269
Guido van Rossumc18993f2002-08-08 15:16:20 +0000270 def _getclosed(self):
Tim Peters116d83c2004-03-28 02:20:45 +0000271 return self._sock is None
Guido van Rossumc18993f2002-08-08 15:16:20 +0000272 closed = property(_getclosed, doc="True if the file is closed")
273
Fred Drakea6070f02000-08-16 14:14:32 +0000274 def close(self):
275 try:
276 if self._sock:
277 self.flush()
278 finally:
Georg Brandldd7b0522007-01-21 10:35:10 +0000279 if self._close:
280 self._sock.close()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000281 self._sock = None
Fred Drakea6070f02000-08-16 14:14:32 +0000282
283 def __del__(self):
Guido van Rossum65f8ced2003-05-29 14:36:57 +0000284 try:
285 self.close()
286 except:
287 # close() may fail if __init__ didn't complete
288 pass
Fred Drakea6070f02000-08-16 14:14:32 +0000289
290 def flush(self):
291 if self._wbuf:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000292 data = "".join(self._wbuf)
Guido van Rossum443fec32002-08-08 01:02:16 +0000293 self._wbuf = []
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000294 self._wbuf_len = 0
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000295 buffer_size = max(self._rbufsize, self.default_bufsize)
296 data_size = len(data)
297 write_offset = 0
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000298 view = memoryview(data)
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000299 try:
300 while write_offset < data_size:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000301 self._sock.sendall(view[write_offset:write_offset+buffer_size])
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000302 write_offset += buffer_size
303 finally:
304 if write_offset < data_size:
305 remainder = data[write_offset:]
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000306 del view, data # explicit free
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000307 self._wbuf.append(remainder)
308 self._wbuf_len = len(remainder)
Fred Drakea6070f02000-08-16 14:14:32 +0000309
Neal Norwitz2b342902002-06-13 22:18:39 +0000310 def fileno(self):
Fred Drakea6070f02000-08-16 14:14:32 +0000311 return self._sock.fileno()
312
313 def write(self, data):
Guido van Rossum443fec32002-08-08 01:02:16 +0000314 data = str(data) # XXX Should really reject non-string non-buffers
315 if not data:
316 return
317 self._wbuf.append(data)
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000318 self._wbuf_len += len(data)
Guido van Rossum443fec32002-08-08 01:02:16 +0000319 if (self._wbufsize == 0 or
320 self._wbufsize == 1 and '\n' in data or
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000321 self._wbuf_len >= self._wbufsize):
Guido van Rossum67f7a382002-06-06 21:08:16 +0000322 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000323
324 def writelines(self, list):
Guido van Rossum443fec32002-08-08 01:02:16 +0000325 # XXX We could do better here for very long lists
326 # XXX Should really reject non-string non-buffers
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000327 lines = filter(None, map(str, list))
328 self._wbuf_len += sum(map(len, lines))
329 self._wbuf.extend(lines)
Guido van Rossum443fec32002-08-08 01:02:16 +0000330 if (self._wbufsize <= 1 or
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000331 self._wbuf_len >= self._wbufsize):
Guido van Rossum443fec32002-08-08 01:02:16 +0000332 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000333
Guido van Rossum67f7a382002-06-06 21:08:16 +0000334 def read(self, size=-1):
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000335 # Use max, disallow tiny reads in a loop as they are very inefficient.
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000336 # We never leave read() with any leftover data from a new recv() call
337 # in our internal buffer.
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000338 rbufsize = max(self._rbufsize, self.default_bufsize)
339 # Our use of StringIO rather than lists of string objects returned by
340 # recv() minimizes memory usage and fragmentation that occurs when
341 # rbufsize is large compared to the typical return value of recv().
342 buf = self._rbuf
343 buf.seek(0, 2) # seek end
Guido van Rossum443fec32002-08-08 01:02:16 +0000344 if size < 0:
345 # Read until EOF
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000346 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000347 while True:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000348 try:
349 data = self._sock.recv(rbufsize)
350 except error, e:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000351 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000352 continue
353 raise
Guido van Rossum443fec32002-08-08 01:02:16 +0000354 if not data:
355 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000356 buf.write(data)
357 return buf.getvalue()
Guido van Rossum443fec32002-08-08 01:02:16 +0000358 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000359 # Read until size bytes or EOF seen, whichever comes first
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000360 buf_len = buf.tell()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000361 if buf_len >= size:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000362 # Already have size bytes in our buffer? Extract and return.
363 buf.seek(0)
364 rv = buf.read(size)
365 self._rbuf = StringIO()
366 self._rbuf.write(buf.read())
367 return rv
368
369 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000370 while True:
371 left = size - buf_len
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000372 # recv() will malloc the amount of memory given as its
373 # parameter even though it often returns much less data
374 # than that. The returned data string is short lived
375 # as we copy it into a StringIO and free it. This avoids
376 # fragmentation issues on many platforms.
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000377 try:
378 data = self._sock.recv(left)
379 except error, e:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000380 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000381 continue
382 raise
Guido van Rossum443fec32002-08-08 01:02:16 +0000383 if not data:
384 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000385 n = len(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000386 if n == size and not buf_len:
387 # Shortcut. Avoid buffer data copies when:
388 # - We have no data in our buffer.
389 # AND
390 # - Our call to recv returned exactly the
391 # number of bytes we were asked to read.
392 return data
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000393 if n == left:
394 buf.write(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000395 del data # explicit free
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000396 break
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000397 assert n <= left, "recv(%d) returned %d bytes" % (left, n)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000398 buf.write(data)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000399 buf_len += n
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000400 del data # explicit free
401 #assert buf_len == buf.tell()
402 return buf.getvalue()
Fred Drakea6070f02000-08-16 14:14:32 +0000403
Guido van Rossum67f7a382002-06-06 21:08:16 +0000404 def readline(self, size=-1):
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000405 buf = self._rbuf
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000406 buf.seek(0, 2) # seek end
407 if buf.tell() > 0:
408 # check if we already have it in our buffer
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000409 buf.seek(0)
410 bline = buf.readline(size)
411 if bline.endswith('\n') or len(bline) == size:
412 self._rbuf = StringIO()
413 self._rbuf.write(buf.read())
414 return bline
415 del bline
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000416 if size < 0:
417 # Read until \n or EOF, whichever comes first
Guido van Rossum48b79692002-08-08 17:34:19 +0000418 if self._rbufsize <= 1:
419 # Speed up unbuffered case
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000420 buf.seek(0)
421 buffers = [buf.read()]
422 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000423 data = None
Guido van Rossum48b79692002-08-08 17:34:19 +0000424 recv = self._sock.recv
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000425 while True:
426 try:
427 while data != "\n":
428 data = recv(1)
429 if not data:
430 break
431 buffers.append(data)
432 except error, e:
433 # The try..except to catch EINTR was moved outside the
434 # recv loop to avoid the per byte overhead.
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000435 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000436 continue
437 raise
438 break
Guido van Rossum48b79692002-08-08 17:34:19 +0000439 return "".join(buffers)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000440
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000441 buf.seek(0, 2) # seek end
442 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000443 while True:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000444 try:
445 data = self._sock.recv(self._rbufsize)
446 except error, e:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000447 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000448 continue
449 raise
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000450 if not data:
451 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000452 nl = data.find('\n')
453 if nl >= 0:
454 nl += 1
Brett Cannon3f92bc62008-08-08 04:27:28 +0000455 buf.write(data[:nl])
456 self._rbuf.write(data[nl:])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000457 del data
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000458 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000459 buf.write(data)
460 return buf.getvalue()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000461 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000462 # Read until size bytes or \n or EOF seen, whichever comes first
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000463 buf.seek(0, 2) # seek end
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000464 buf_len = buf.tell()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000465 if buf_len >= size:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000466 buf.seek(0)
467 rv = buf.read(size)
468 self._rbuf = StringIO()
469 self._rbuf.write(buf.read())
470 return rv
471 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000472 while True:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000473 try:
474 data = self._sock.recv(self._rbufsize)
475 except error, e:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000476 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000477 continue
478 raise
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000479 if not data:
480 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000481 left = size - buf_len
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000482 # did we just receive a newline?
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000483 nl = data.find('\n', 0, left)
484 if nl >= 0:
485 nl += 1
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000486 # save the excess data to _rbuf
Brett Cannon3f92bc62008-08-08 04:27:28 +0000487 self._rbuf.write(data[nl:])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000488 if buf_len:
Brett Cannon3f92bc62008-08-08 04:27:28 +0000489 buf.write(data[:nl])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000490 break
491 else:
492 # Shortcut. Avoid data copy through buf when returning
493 # a substring of our first recv().
494 return data[:nl]
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000495 n = len(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000496 if n == size and not buf_len:
497 # Shortcut. Avoid data copy through buf when
498 # returning exactly all of our first recv().
499 return data
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000500 if n >= left:
Brett Cannon3f92bc62008-08-08 04:27:28 +0000501 buf.write(data[:left])
502 self._rbuf.write(data[left:])
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000503 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000504 buf.write(data)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000505 buf_len += n
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000506 #assert buf_len == buf.tell()
507 return buf.getvalue()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000508
509 def readlines(self, sizehint=0):
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000510 total = 0
Fred Drakea6070f02000-08-16 14:14:32 +0000511 list = []
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000512 while True:
Fred Drakea6070f02000-08-16 14:14:32 +0000513 line = self.readline()
Neal Norwitz2b342902002-06-13 22:18:39 +0000514 if not line:
515 break
Fred Drakea6070f02000-08-16 14:14:32 +0000516 list.append(line)
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000517 total += len(line)
518 if sizehint and total >= sizehint:
519 break
Fred Drakea6070f02000-08-16 14:14:32 +0000520 return list
Guido van Rossum443fec32002-08-08 01:02:16 +0000521
522 # Iterator protocols
523
524 def __iter__(self):
525 return self
526
527 def next(self):
528 line = self.readline()
529 if not line:
530 raise StopIteration
531 return line
Facundo Batista07c78be2007-03-23 18:54:07 +0000532
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000533_GLOBAL_DEFAULT_TIMEOUT = object()
Facundo Batista07c78be2007-03-23 18:54:07 +0000534
Gregory P. Smith79a3eb12010-01-03 01:29:44 +0000535def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
536 source_address=None):
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000537 """Connect to *address* and return the socket object.
Facundo Batista07c78be2007-03-23 18:54:07 +0000538
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000539 Convenience function. Connect to *address* (a 2-tuple ``(host,
540 port)``) and return the socket object. Passing the optional
541 *timeout* parameter will set the timeout on the socket instance
542 before attempting to connect. If no *timeout* is supplied, the
543 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smith79a3eb12010-01-03 01:29:44 +0000544 is used. If *source_address* is set it must be a tuple of (host, port)
545 for the socket to bind as a source address before making the connection.
546 An host of '' or port 0 tells the OS to use the default.
Facundo Batista07c78be2007-03-23 18:54:07 +0000547 """
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000548
Facundo Batista07c78be2007-03-23 18:54:07 +0000549 msg = "getaddrinfo returns an empty list"
550 host, port = address
551 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
552 af, socktype, proto, canonname, sa = res
553 sock = None
554 try:
555 sock = socket(af, socktype, proto)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000556 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Facundo Batista07c78be2007-03-23 18:54:07 +0000557 sock.settimeout(timeout)
Gregory P. Smith79a3eb12010-01-03 01:29:44 +0000558 if source_address:
559 sock.bind(source_address)
Facundo Batista07c78be2007-03-23 18:54:07 +0000560 sock.connect(sa)
561 return sock
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000562
Facundo Batista07c78be2007-03-23 18:54:07 +0000563 except error, msg:
564 if sock is not None:
565 sock.close()
566
567 raise error, msg