blob: aac04f6ca7a562a684007228b82850ece86141e4 [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
Daniel Stutzbach66c981b2010-08-31 20:29:39 +0000192 def close(self, _closedsocket=_closedsocket,
193 _delegate_methods=_delegate_methods, setattr=setattr):
194 # This function should not reference any globals. See issue #808164.
Guido van Rossum715f9702002-08-08 18:11:36 +0000195 self._sock = _closedsocket()
Martin v. Löwis7596e832006-07-01 15:33:37 +0000196 dummy = self._sock._dummy
197 for method in _delegate_methods:
198 setattr(self, method, dummy)
Guido van Rossumc18993f2002-08-08 15:16:20 +0000199 close.__doc__ = _realsocket.close.__doc__
Fred Drakea6070f02000-08-16 14:14:32 +0000200
Fred Drakea6070f02000-08-16 14:14:32 +0000201 def accept(self):
202 sock, addr = self._sock.accept()
Guido van Rossumc18993f2002-08-08 15:16:20 +0000203 return _socketobject(_sock=sock), addr
204 accept.__doc__ = _realsocket.accept.__doc__
Fred Drakea6070f02000-08-16 14:14:32 +0000205
206 def dup(self):
Guido van Rossumc18993f2002-08-08 15:16:20 +0000207 """dup() -> socket object
208
209 Return a new socket object connected to the same system resource."""
210 return _socketobject(_sock=self._sock)
Fred Drakea6070f02000-08-16 14:14:32 +0000211
212 def makefile(self, mode='r', bufsize=-1):
Guido van Rossumc18993f2002-08-08 15:16:20 +0000213 """makefile([mode[, bufsize]]) -> file object
214
215 Return a regular file object corresponding to the socket. The mode
216 and bufsize arguments are as for the built-in open() function."""
Fred Drakea6070f02000-08-16 14:14:32 +0000217 return _fileobject(self._sock, mode, bufsize)
Tim Peters0ae07bd2006-03-22 03:23:21 +0000218
Georg Brandlbb03ac02006-03-21 18:17:25 +0000219 family = property(lambda self: self._sock.family, doc="the socket family")
220 type = property(lambda self: self._sock.type, doc="the socket type")
221 proto = property(lambda self: self._sock.proto, doc="the socket protocol")
Georg Brandlbc45a3f2006-03-17 19:17:34 +0000222
Chris Withersb5248252009-04-11 11:22:19 +0000223def meth(name,self,*args):
224 return getattr(self._sock,name)(*args)
225
226for _m in _socketmethods:
227 p = partial(meth,_m)
228 p.__name__ = _m
229 p.__doc__ = getattr(_realsocket,_m).__doc__
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000230 m = MethodType(p,None,_socketobject)
Chris Withersb5248252009-04-11 11:22:19 +0000231 setattr(_socketobject,_m,m)
Fred Drakea6070f02000-08-16 14:14:32 +0000232
Skip Montanaro89feabc2003-03-30 04:54:24 +0000233socket = SocketType = _socketobject
Fred Drakea6070f02000-08-16 14:14:32 +0000234
Guido van Rossumc18993f2002-08-08 15:16:20 +0000235class _fileobject(object):
Guido van Rossum443fec32002-08-08 01:02:16 +0000236 """Faux file object attached to a socket object."""
237
238 default_bufsize = 8192
Guido van Rossumc18993f2002-08-08 15:16:20 +0000239 name = "<socket>"
240
241 __slots__ = ["mode", "bufsize", "softspace",
242 # "closed" is a property, see below
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000243 "_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf", "_wbuf_len",
Georg Brandldd7b0522007-01-21 10:35:10 +0000244 "_close"]
Fred Drakea6070f02000-08-16 14:14:32 +0000245
Georg Brandldd7b0522007-01-21 10:35:10 +0000246 def __init__(self, sock, mode='rb', bufsize=-1, close=False):
Fred Drakea6070f02000-08-16 14:14:32 +0000247 self._sock = sock
Guido van Rossumc18993f2002-08-08 15:16:20 +0000248 self.mode = mode # Not actually used in this version
Guido van Rossum443fec32002-08-08 01:02:16 +0000249 if bufsize < 0:
250 bufsize = self.default_bufsize
Guido van Rossum7c3b6342002-08-08 15:22:12 +0000251 self.bufsize = bufsize
252 self.softspace = False
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000253 # _rbufsize is the suggested recv buffer size. It is *strictly*
254 # obeyed within readline() for recv calls. If it is larger than
255 # default_bufsize it will be used for recv calls within read().
Guido van Rossum443fec32002-08-08 01:02:16 +0000256 if bufsize == 0:
257 self._rbufsize = 1
258 elif bufsize == 1:
259 self._rbufsize = self.default_bufsize
260 else:
261 self._rbufsize = bufsize
Fred Drakea6070f02000-08-16 14:14:32 +0000262 self._wbufsize = bufsize
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000263 # We use StringIO for the read buffer to avoid holding a list
264 # of variously sized string objects which have been known to
265 # fragment the heap due to how they are malloc()ed and often
266 # realloc()ed down much smaller than their original allocation.
267 self._rbuf = StringIO()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000268 self._wbuf = [] # A list of strings
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000269 self._wbuf_len = 0
Georg Brandldd7b0522007-01-21 10:35:10 +0000270 self._close = close
Fred Drakea6070f02000-08-16 14:14:32 +0000271
Guido van Rossumc18993f2002-08-08 15:16:20 +0000272 def _getclosed(self):
Tim Peters116d83c2004-03-28 02:20:45 +0000273 return self._sock is None
Guido van Rossumc18993f2002-08-08 15:16:20 +0000274 closed = property(_getclosed, doc="True if the file is closed")
275
Fred Drakea6070f02000-08-16 14:14:32 +0000276 def close(self):
277 try:
278 if self._sock:
279 self.flush()
280 finally:
Georg Brandldd7b0522007-01-21 10:35:10 +0000281 if self._close:
282 self._sock.close()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000283 self._sock = None
Fred Drakea6070f02000-08-16 14:14:32 +0000284
285 def __del__(self):
Guido van Rossum65f8ced2003-05-29 14:36:57 +0000286 try:
287 self.close()
288 except:
289 # close() may fail if __init__ didn't complete
290 pass
Fred Drakea6070f02000-08-16 14:14:32 +0000291
292 def flush(self):
293 if self._wbuf:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000294 data = "".join(self._wbuf)
Guido van Rossum443fec32002-08-08 01:02:16 +0000295 self._wbuf = []
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000296 self._wbuf_len = 0
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000297 buffer_size = max(self._rbufsize, self.default_bufsize)
298 data_size = len(data)
299 write_offset = 0
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000300 view = memoryview(data)
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000301 try:
302 while write_offset < data_size:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000303 self._sock.sendall(view[write_offset:write_offset+buffer_size])
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000304 write_offset += buffer_size
305 finally:
306 if write_offset < data_size:
307 remainder = data[write_offset:]
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000308 del view, data # explicit free
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000309 self._wbuf.append(remainder)
310 self._wbuf_len = len(remainder)
Fred Drakea6070f02000-08-16 14:14:32 +0000311
Neal Norwitz2b342902002-06-13 22:18:39 +0000312 def fileno(self):
Fred Drakea6070f02000-08-16 14:14:32 +0000313 return self._sock.fileno()
314
315 def write(self, data):
Guido van Rossum443fec32002-08-08 01:02:16 +0000316 data = str(data) # XXX Should really reject non-string non-buffers
317 if not data:
318 return
319 self._wbuf.append(data)
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000320 self._wbuf_len += len(data)
Guido van Rossum443fec32002-08-08 01:02:16 +0000321 if (self._wbufsize == 0 or
Kristján Valur Jónsson2380fee2012-12-25 13:04:50 +0000322 (self._wbufsize == 1 and '\n' in data) or
323 (self._wbufsize > 1 and self._wbuf_len >= self._wbufsize)):
Guido van Rossum67f7a382002-06-06 21:08:16 +0000324 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000325
326 def writelines(self, list):
Guido van Rossum443fec32002-08-08 01:02:16 +0000327 # XXX We could do better here for very long lists
328 # XXX Should really reject non-string non-buffers
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000329 lines = filter(None, map(str, list))
330 self._wbuf_len += sum(map(len, lines))
331 self._wbuf.extend(lines)
Guido van Rossum443fec32002-08-08 01:02:16 +0000332 if (self._wbufsize <= 1 or
Kristján Valur Jónsson36c39282009-06-02 13:14:08 +0000333 self._wbuf_len >= self._wbufsize):
Guido van Rossum443fec32002-08-08 01:02:16 +0000334 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000335
Guido van Rossum67f7a382002-06-06 21:08:16 +0000336 def read(self, size=-1):
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000337 # Use max, disallow tiny reads in a loop as they are very inefficient.
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000338 # We never leave read() with any leftover data from a new recv() call
339 # in our internal buffer.
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000340 rbufsize = max(self._rbufsize, self.default_bufsize)
341 # Our use of StringIO rather than lists of string objects returned by
342 # recv() minimizes memory usage and fragmentation that occurs when
343 # rbufsize is large compared to the typical return value of recv().
344 buf = self._rbuf
345 buf.seek(0, 2) # seek end
Guido van Rossum443fec32002-08-08 01:02:16 +0000346 if size < 0:
347 # Read until EOF
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000348 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000349 while True:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000350 try:
351 data = self._sock.recv(rbufsize)
352 except error, e:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000353 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000354 continue
355 raise
Guido van Rossum443fec32002-08-08 01:02:16 +0000356 if not data:
357 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000358 buf.write(data)
359 return buf.getvalue()
Guido van Rossum443fec32002-08-08 01:02:16 +0000360 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000361 # Read until size bytes or EOF seen, whichever comes first
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000362 buf_len = buf.tell()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000363 if buf_len >= size:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000364 # Already have size bytes in our buffer? Extract and return.
365 buf.seek(0)
366 rv = buf.read(size)
367 self._rbuf = StringIO()
368 self._rbuf.write(buf.read())
369 return rv
370
371 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000372 while True:
373 left = size - buf_len
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000374 # recv() will malloc the amount of memory given as its
375 # parameter even though it often returns much less data
376 # than that. The returned data string is short lived
377 # as we copy it into a StringIO and free it. This avoids
378 # fragmentation issues on many platforms.
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000379 try:
380 data = self._sock.recv(left)
381 except error, e:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000382 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000383 continue
384 raise
Guido van Rossum443fec32002-08-08 01:02:16 +0000385 if not data:
386 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000387 n = len(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000388 if n == size and not buf_len:
389 # Shortcut. Avoid buffer data copies when:
390 # - We have no data in our buffer.
391 # AND
392 # - Our call to recv returned exactly the
393 # number of bytes we were asked to read.
394 return data
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000395 if n == left:
396 buf.write(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000397 del data # explicit free
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000398 break
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000399 assert n <= left, "recv(%d) returned %d bytes" % (left, n)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000400 buf.write(data)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000401 buf_len += n
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000402 del data # explicit free
403 #assert buf_len == buf.tell()
404 return buf.getvalue()
Fred Drakea6070f02000-08-16 14:14:32 +0000405
Guido van Rossum67f7a382002-06-06 21:08:16 +0000406 def readline(self, size=-1):
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000407 buf = self._rbuf
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000408 buf.seek(0, 2) # seek end
409 if buf.tell() > 0:
410 # check if we already have it in our buffer
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000411 buf.seek(0)
412 bline = buf.readline(size)
413 if bline.endswith('\n') or len(bline) == size:
414 self._rbuf = StringIO()
415 self._rbuf.write(buf.read())
416 return bline
417 del bline
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000418 if size < 0:
419 # Read until \n or EOF, whichever comes first
Guido van Rossum48b79692002-08-08 17:34:19 +0000420 if self._rbufsize <= 1:
421 # Speed up unbuffered case
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000422 buf.seek(0)
423 buffers = [buf.read()]
424 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000425 data = None
Guido van Rossum48b79692002-08-08 17:34:19 +0000426 recv = self._sock.recv
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000427 while True:
428 try:
429 while data != "\n":
430 data = recv(1)
431 if not data:
432 break
433 buffers.append(data)
434 except error, e:
435 # The try..except to catch EINTR was moved outside the
436 # recv loop to avoid the per byte overhead.
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000437 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000438 continue
439 raise
440 break
Guido van Rossum48b79692002-08-08 17:34:19 +0000441 return "".join(buffers)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000442
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000443 buf.seek(0, 2) # seek end
444 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000445 while True:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000446 try:
447 data = self._sock.recv(self._rbufsize)
448 except error, e:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000449 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000450 continue
451 raise
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000452 if not data:
453 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000454 nl = data.find('\n')
455 if nl >= 0:
456 nl += 1
Brett Cannon3f92bc62008-08-08 04:27:28 +0000457 buf.write(data[:nl])
458 self._rbuf.write(data[nl:])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000459 del data
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000460 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000461 buf.write(data)
462 return buf.getvalue()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000463 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000464 # Read until size bytes or \n or EOF seen, whichever comes first
Gregory P. Smith24237ea2008-05-05 21:53:45 +0000465 buf.seek(0, 2) # seek end
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000466 buf_len = buf.tell()
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000467 if buf_len >= size:
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000468 buf.seek(0)
469 rv = buf.read(size)
470 self._rbuf = StringIO()
471 self._rbuf.write(buf.read())
472 return rv
473 self._rbuf = StringIO() # reset _rbuf. we consume it via buf.
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000474 while True:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000475 try:
476 data = self._sock.recv(self._rbufsize)
477 except error, e:
Antoine Pitroudaa524a2009-10-14 18:27:32 +0000478 if e.args[0] == EINTR:
Gregory P. Smithc4ad0342009-08-13 18:54:50 +0000479 continue
480 raise
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000481 if not data:
482 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000483 left = size - buf_len
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000484 # did we just receive a newline?
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000485 nl = data.find('\n', 0, left)
486 if nl >= 0:
487 nl += 1
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000488 # save the excess data to _rbuf
Brett Cannon3f92bc62008-08-08 04:27:28 +0000489 self._rbuf.write(data[nl:])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000490 if buf_len:
Brett Cannon3f92bc62008-08-08 04:27:28 +0000491 buf.write(data[:nl])
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000492 break
493 else:
494 # Shortcut. Avoid data copy through buf when returning
495 # a substring of our first recv().
496 return data[:nl]
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000497 n = len(data)
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000498 if n == size and not buf_len:
499 # Shortcut. Avoid data copy through buf when
500 # returning exactly all of our first recv().
501 return data
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000502 if n >= left:
Brett Cannon3f92bc62008-08-08 04:27:28 +0000503 buf.write(data[:left])
504 self._rbuf.write(data[left:])
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000505 break
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000506 buf.write(data)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000507 buf_len += n
Gregory P. Smithf8cc6402008-05-02 07:26:52 +0000508 #assert buf_len == buf.tell()
509 return buf.getvalue()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000510
511 def readlines(self, sizehint=0):
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000512 total = 0
Fred Drakea6070f02000-08-16 14:14:32 +0000513 list = []
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000514 while True:
Fred Drakea6070f02000-08-16 14:14:32 +0000515 line = self.readline()
Neal Norwitz2b342902002-06-13 22:18:39 +0000516 if not line:
517 break
Fred Drakea6070f02000-08-16 14:14:32 +0000518 list.append(line)
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000519 total += len(line)
520 if sizehint and total >= sizehint:
521 break
Fred Drakea6070f02000-08-16 14:14:32 +0000522 return list
Guido van Rossum443fec32002-08-08 01:02:16 +0000523
524 # Iterator protocols
525
526 def __iter__(self):
527 return self
528
529 def next(self):
530 line = self.readline()
531 if not line:
532 raise StopIteration
533 return line
Facundo Batista07c78be2007-03-23 18:54:07 +0000534
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000535_GLOBAL_DEFAULT_TIMEOUT = object()
Facundo Batista07c78be2007-03-23 18:54:07 +0000536
Gregory P. Smith79a3eb12010-01-03 01:29:44 +0000537def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
538 source_address=None):
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000539 """Connect to *address* and return the socket object.
Facundo Batista07c78be2007-03-23 18:54:07 +0000540
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000541 Convenience function. Connect to *address* (a 2-tuple ``(host,
542 port)``) and return the socket object. Passing the optional
543 *timeout* parameter will set the timeout on the socket instance
544 before attempting to connect. If no *timeout* is supplied, the
545 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smith79a3eb12010-01-03 01:29:44 +0000546 is used. If *source_address* is set it must be a tuple of (host, port)
547 for the socket to bind as a source address before making the connection.
548 An host of '' or port 0 tells the OS to use the default.
Facundo Batista07c78be2007-03-23 18:54:07 +0000549 """
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000550
Facundo Batista07c78be2007-03-23 18:54:07 +0000551 host, port = address
Antoine Pitrouc818ed42010-09-07 21:40:25 +0000552 err = None
Facundo Batista07c78be2007-03-23 18:54:07 +0000553 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
554 af, socktype, proto, canonname, sa = res
555 sock = None
556 try:
557 sock = socket(af, socktype, proto)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +0000558 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Facundo Batista07c78be2007-03-23 18:54:07 +0000559 sock.settimeout(timeout)
Gregory P. Smith79a3eb12010-01-03 01:29:44 +0000560 if source_address:
561 sock.bind(source_address)
Facundo Batista07c78be2007-03-23 18:54:07 +0000562 sock.connect(sa)
563 return sock
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000564
Antoine Pitrouc818ed42010-09-07 21:40:25 +0000565 except error as _:
566 err = _
Facundo Batista07c78be2007-03-23 18:54:07 +0000567 if sock is not None:
568 sock.close()
569
Antoine Pitrouc818ed42010-09-07 21:40:25 +0000570 if err is not None:
571 raise err
572 else:
573 raise error("getaddrinfo returns an empty list")