blob: 45a122fdce957aefcc8a6419896413917c56fd90 [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
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
Guido van Rossumc18993f2002-08-08 15:16:20 +000049_have_ssl = False
Marc-André Lemburga5d2b4c2002-02-16 18:23:30 +000050try:
Guido van Rossumde7cade2002-08-08 15:25:28 +000051 import _ssl
Marc-André Lemburga5d2b4c2002-02-16 18:23:30 +000052 from _ssl import *
Guido van Rossumc18993f2002-08-08 15:16:20 +000053 _have_ssl = True
Marc-André Lemburga5d2b4c2002-02-16 18:23:30 +000054except ImportError:
Guido van Rossumc18993f2002-08-08 15:16:20 +000055 pass
Fred Drakea6070f02000-08-16 14:14:32 +000056
57import os, sys
58
Fred Drake70d566b2003-04-29 19:50:25 +000059try:
60 from errno import EBADF
61except ImportError:
62 EBADF = 9
63
Skip Montanaro0de65802001-02-15 22:15:14 +000064__all__ = ["getfqdn"]
Skip Montanaro0de65802001-02-15 22:15:14 +000065__all__.extend(os._get_exports_list(_socket))
Guido van Rossumde7cade2002-08-08 15:25:28 +000066if _have_ssl:
67 __all__.extend(os._get_exports_list(_ssl))
Skip Montanaro0de65802001-02-15 22:15:14 +000068
Guido van Rossumc18993f2002-08-08 15:16:20 +000069_realsocket = socket
Martin v. Löwis1867f242003-06-14 13:30:53 +000070if _have_ssl:
71 _realssl = ssl
72 def ssl(sock, keyfile=None, certfile=None):
73 if hasattr(sock, "_sock"):
74 sock = sock._sock
75 return _realssl(sock, keyfile, certfile)
Fred Drakea6070f02000-08-16 14:14:32 +000076
77# WSA error codes
78if sys.platform.lower().startswith("win"):
79 errorTab = {}
80 errorTab[10004] = "The operation was interrupted."
81 errorTab[10009] = "A bad file handle was passed."
82 errorTab[10013] = "Permission denied."
83 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
84 errorTab[10022] = "An invalid operation was attempted."
85 errorTab[10035] = "The socket operation would block"
86 errorTab[10036] = "A blocking operation is already in progress."
87 errorTab[10048] = "The network address is in use."
88 errorTab[10054] = "The connection has been reset."
89 errorTab[10058] = "The network has been shut down."
90 errorTab[10060] = "The operation timed out."
91 errorTab[10061] = "Connection refused."
92 errorTab[10063] = "The name is too long."
93 errorTab[10064] = "The host is down."
94 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +000095 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +000096
Fred Drakea6070f02000-08-16 14:14:32 +000097
98
99def getfqdn(name=''):
100 """Get fully qualified domain name from name.
101
102 An empty argument is interpreted as meaning the local host.
103
104 First the hostname returned by gethostbyaddr() is checked, then
105 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000106 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000107 """
108 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000109 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000110 name = gethostname()
111 try:
112 hostname, aliases, ipaddrs = gethostbyaddr(name)
113 except error:
114 pass
115 else:
116 aliases.insert(0, hostname)
117 for name in aliases:
118 if '.' in name:
119 break
120 else:
121 name = hostname
122 return name
123
124
Guido van Rossume5e50592001-08-18 01:23:20 +0000125_socketmethods = (
126 'bind', 'connect', 'connect_ex', 'fileno', 'listen',
127 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
Skip Montanaroc6899182003-04-29 19:27:26 +0000128 'sendall', 'setblocking',
Guido van Rossum67f7a382002-06-06 21:08:16 +0000129 'settimeout', 'gettimeout', 'shutdown')
Guido van Rossume5e50592001-08-18 01:23:20 +0000130
Martin v. Löwisa94568a2003-05-10 07:36:56 +0000131if sys.platform == "riscos":
132 _socketmethods = _socketmethods + ('sleeptaskw',)
133
Martin v. Löwis7596e832006-07-01 15:33:37 +0000134# All the method names that must be delegated to either the real socket
135# object or the _closedsocket object.
136_delegate_methods = ("recv", "recvfrom", "recv_into", "recvfrom_into",
137 "send", "sendto")
138
Guido van Rossum715f9702002-08-08 18:11:36 +0000139class _closedsocket(object):
140 __slots__ = []
Skip Montanaroc6899182003-04-29 19:27:26 +0000141 def _dummy(*args):
Fred Drake70d566b2003-04-29 19:50:25 +0000142 raise error(EBADF, 'Bad file descriptor')
Martin v. Löwis7596e832006-07-01 15:33:37 +0000143 # All _delegate_methods must also be initialized here.
144 send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy
145 __getattr__ = _dummy
Guido van Rossum715f9702002-08-08 18:11:36 +0000146
Martin v. Löwisf25e35b2007-07-27 18:28:22 +0000147# Wrapper around platform socket objects. This implements
148# a platform-independent dup() functionality. The
149# implementation currently relies on reference counting
150# to close the underlying socket object.
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 Brandldd7b0522007-01-21 10:35:10 +0000209 "_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf",
210 "_close"]
Fred Drakea6070f02000-08-16 14:14:32 +0000211
Georg Brandldd7b0522007-01-21 10:35:10 +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
Guido van Rossum443fec32002-08-08 01:02:16 +0000219 if bufsize == 0:
220 self._rbufsize = 1
221 elif bufsize == 1:
222 self._rbufsize = self.default_bufsize
223 else:
224 self._rbufsize = bufsize
Fred Drakea6070f02000-08-16 14:14:32 +0000225 self._wbufsize = bufsize
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000226 self._rbuf = "" # A string
227 self._wbuf = [] # A list of strings
Georg Brandldd7b0522007-01-21 10:35:10 +0000228 self._close = close
Fred Drakea6070f02000-08-16 14:14:32 +0000229
Guido van Rossumc18993f2002-08-08 15:16:20 +0000230 def _getclosed(self):
Tim Peters116d83c2004-03-28 02:20:45 +0000231 return self._sock is None
Guido van Rossumc18993f2002-08-08 15:16:20 +0000232 closed = property(_getclosed, doc="True if the file is closed")
233
Fred Drakea6070f02000-08-16 14:14:32 +0000234 def close(self):
235 try:
236 if self._sock:
237 self.flush()
238 finally:
Georg Brandldd7b0522007-01-21 10:35:10 +0000239 if self._close:
240 self._sock.close()
Guido van Rossum67f7a382002-06-06 21:08:16 +0000241 self._sock = None
Fred Drakea6070f02000-08-16 14:14:32 +0000242
243 def __del__(self):
Guido van Rossum65f8ced2003-05-29 14:36:57 +0000244 try:
245 self.close()
246 except:
247 # close() may fail if __init__ didn't complete
248 pass
Fred Drakea6070f02000-08-16 14:14:32 +0000249
250 def flush(self):
251 if self._wbuf:
Guido van Rossum443fec32002-08-08 01:02:16 +0000252 buffer = "".join(self._wbuf)
253 self._wbuf = []
Guido van Rossum67f7a382002-06-06 21:08:16 +0000254 self._sock.sendall(buffer)
Fred Drakea6070f02000-08-16 14:14:32 +0000255
Neal Norwitz2b342902002-06-13 22:18:39 +0000256 def fileno(self):
Fred Drakea6070f02000-08-16 14:14:32 +0000257 return self._sock.fileno()
258
259 def write(self, data):
Guido van Rossum443fec32002-08-08 01:02:16 +0000260 data = str(data) # XXX Should really reject non-string non-buffers
261 if not data:
262 return
263 self._wbuf.append(data)
264 if (self._wbufsize == 0 or
265 self._wbufsize == 1 and '\n' in data or
266 self._get_wbuf_len() >= self._wbufsize):
Guido van Rossum67f7a382002-06-06 21:08:16 +0000267 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000268
269 def writelines(self, list):
Guido van Rossum443fec32002-08-08 01:02:16 +0000270 # XXX We could do better here for very long lists
271 # XXX Should really reject non-string non-buffers
272 self._wbuf.extend(filter(None, map(str, list)))
273 if (self._wbufsize <= 1 or
274 self._get_wbuf_len() >= self._wbufsize):
275 self.flush()
Fred Drakea6070f02000-08-16 14:14:32 +0000276
Guido van Rossum443fec32002-08-08 01:02:16 +0000277 def _get_wbuf_len(self):
Guido van Rossum67f7a382002-06-06 21:08:16 +0000278 buf_len = 0
Guido van Rossum443fec32002-08-08 01:02:16 +0000279 for x in self._wbuf:
280 buf_len += len(x)
Guido van Rossum67f7a382002-06-06 21:08:16 +0000281 return buf_len
Fred Drakea6070f02000-08-16 14:14:32 +0000282
Guido van Rossum67f7a382002-06-06 21:08:16 +0000283 def read(self, size=-1):
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000284 data = self._rbuf
Guido van Rossum443fec32002-08-08 01:02:16 +0000285 if size < 0:
286 # Read until EOF
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000287 buffers = []
288 if data:
289 buffers.append(data)
290 self._rbuf = ""
Guido van Rossum443fec32002-08-08 01:02:16 +0000291 if self._rbufsize <= 1:
292 recv_size = self.default_bufsize
293 else:
294 recv_size = self._rbufsize
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000295 while True:
Guido van Rossum443fec32002-08-08 01:02:16 +0000296 data = self._sock.recv(recv_size)
297 if not data:
298 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000299 buffers.append(data)
300 return "".join(buffers)
Guido van Rossum443fec32002-08-08 01:02:16 +0000301 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000302 # Read until size bytes or EOF seen, whichever comes first
303 buf_len = len(data)
304 if buf_len >= size:
305 self._rbuf = data[size:]
306 return data[:size]
307 buffers = []
308 if data:
309 buffers.append(data)
310 self._rbuf = ""
311 while True:
312 left = size - buf_len
313 recv_size = max(self._rbufsize, left)
Guido van Rossum443fec32002-08-08 01:02:16 +0000314 data = self._sock.recv(recv_size)
315 if not data:
316 break
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000317 buffers.append(data)
318 n = len(data)
319 if n >= left:
320 self._rbuf = data[left:]
321 buffers[-1] = data[:left]
322 break
323 buf_len += n
324 return "".join(buffers)
Fred Drakea6070f02000-08-16 14:14:32 +0000325
Guido van Rossum67f7a382002-06-06 21:08:16 +0000326 def readline(self, size=-1):
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000327 data = self._rbuf
328 if size < 0:
329 # Read until \n or EOF, whichever comes first
Guido van Rossum48b79692002-08-08 17:34:19 +0000330 if self._rbufsize <= 1:
331 # Speed up unbuffered case
332 assert data == ""
333 buffers = []
334 recv = self._sock.recv
335 while data != "\n":
336 data = recv(1)
337 if not data:
338 break
339 buffers.append(data)
340 return "".join(buffers)
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000341 nl = data.find('\n')
342 if nl >= 0:
343 nl += 1
344 self._rbuf = data[nl:]
345 return data[:nl]
346 buffers = []
347 if data:
348 buffers.append(data)
349 self._rbuf = ""
350 while True:
351 data = self._sock.recv(self._rbufsize)
352 if not data:
353 break
354 buffers.append(data)
355 nl = data.find('\n')
356 if nl >= 0:
357 nl += 1
358 self._rbuf = data[nl:]
359 buffers[-1] = data[:nl]
360 break
361 return "".join(buffers)
Guido van Rossum67f7a382002-06-06 21:08:16 +0000362 else:
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000363 # Read until size bytes or \n or EOF seen, whichever comes first
364 nl = data.find('\n', 0, size)
365 if nl >= 0:
366 nl += 1
367 self._rbuf = data[nl:]
368 return data[:nl]
369 buf_len = len(data)
370 if buf_len >= size:
371 self._rbuf = data[size:]
372 return data[:size]
373 buffers = []
374 if data:
375 buffers.append(data)
376 self._rbuf = ""
377 while True:
378 data = self._sock.recv(self._rbufsize)
379 if not data:
380 break
381 buffers.append(data)
382 left = size - buf_len
383 nl = data.find('\n', 0, left)
384 if nl >= 0:
385 nl += 1
386 self._rbuf = data[nl:]
387 buffers[-1] = data[:nl]
388 break
389 n = len(data)
390 if n >= left:
391 self._rbuf = data[left:]
392 buffers[-1] = data[:left]
393 break
394 buf_len += n
395 return "".join(buffers)
Guido van Rossum67f7a382002-06-06 21:08:16 +0000396
397 def readlines(self, sizehint=0):
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000398 total = 0
Fred Drakea6070f02000-08-16 14:14:32 +0000399 list = []
Guido van Rossumfb3deec2002-08-08 17:16:09 +0000400 while True:
Fred Drakea6070f02000-08-16 14:14:32 +0000401 line = self.readline()
Neal Norwitz2b342902002-06-13 22:18:39 +0000402 if not line:
403 break
Fred Drakea6070f02000-08-16 14:14:32 +0000404 list.append(line)
Martin v. Löwis6df27f82000-09-19 11:25:58 +0000405 total += len(line)
406 if sizehint and total >= sizehint:
407 break
Fred Drakea6070f02000-08-16 14:14:32 +0000408 return list
Guido van Rossum443fec32002-08-08 01:02:16 +0000409
410 # Iterator protocols
411
412 def __iter__(self):
413 return self
414
415 def next(self):
416 line = self.readline()
417 if not line:
418 raise StopIteration
419 return line
Facundo Batista07c78be2007-03-23 18:54:07 +0000420
421
422def create_connection(address, timeout=None):
423 """Connect to address (host, port) with an optional timeout.
424
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000425 Provides access to socketobject timeout for higher-level
426 protocols. Passing a timeout will set the timeout on the
Facundo Batista07c78be2007-03-23 18:54:07 +0000427 socket instance (if not present, or passed as None, the
428 default global timeout setting will be used).
429 """
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000430
Facundo Batista07c78be2007-03-23 18:54:07 +0000431 msg = "getaddrinfo returns an empty list"
432 host, port = address
433 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
434 af, socktype, proto, canonname, sa = res
435 sock = None
436 try:
437 sock = socket(af, socktype, proto)
438 if timeout is not None:
439 sock.settimeout(timeout)
440 sock.connect(sa)
441 return sock
Neal Norwitz0d4c06e2007-04-25 06:30:05 +0000442
Facundo Batista07c78be2007-03-23 18:54:07 +0000443 except error, msg:
444 if sock is not None:
445 sock.close()
446
447 raise error, msg