blob: ea56a67d555eddd7d62df9c02154ea9d0ea656d5 [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 Dickinson5c91bf32009-06-02 07:41: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)
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +000024socket.getdefaulttimeout() -- get the default timeout value
25socket.setdefaulttimeout() -- set the default timeout value
Gregory P. Smithb4066372010-01-03 03:28:29 +000026create_connection() -- connects to an address, with an optional timeout and
27 optional source address.
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 Rossum7d0a8262007-05-21 23:13:11 +000049import os, sys, io
Fred Drakea6070f02000-08-16 14:14:32 +000050
Fred Drake70d566b2003-04-29 19:50:25 +000051try:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000052 import errno
Fred Drake70d566b2003-04-29 19:50:25 +000053except ImportError:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000054 errno = None
55EBADF = getattr(errno, 'EBADF', 9)
56EINTR = getattr(errno, 'EINTR', 4)
Antoine Pitrou98b46702010-09-18 22:59:00 +000057EAGAIN = getattr(errno, 'EAGAIN', 11)
58EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
Fred Drake70d566b2003-04-29 19:50:25 +000059
Benjamin Petersonef3e4c22009-04-11 19:48:14 +000060__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000061__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000062
63
64_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000065
Fred Drakea6070f02000-08-16 14:14:32 +000066# WSA error codes
67if sys.platform.lower().startswith("win"):
68 errorTab = {}
69 errorTab[10004] = "The operation was interrupted."
70 errorTab[10009] = "A bad file handle was passed."
71 errorTab[10013] = "Permission denied."
72 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
73 errorTab[10022] = "An invalid operation was attempted."
74 errorTab[10035] = "The socket operation would block"
75 errorTab[10036] = "A blocking operation is already in progress."
76 errorTab[10048] = "The network address is in use."
77 errorTab[10054] = "The connection has been reset."
78 errorTab[10058] = "The network has been shut down."
79 errorTab[10060] = "The operation timed out."
80 errorTab[10061] = "Connection refused."
81 errorTab[10063] = "The name is too long."
82 errorTab[10064] = "The host is down."
83 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +000084 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +000085
Fred Drakea6070f02000-08-16 14:14:32 +000086
Guido van Rossum7d0a8262007-05-21 23:13:11 +000087class socket(_socket.socket):
88
89 """A subclass of _socket.socket adding the makefile() method."""
90
Guido van Rossum86bc33c2007-11-14 22:32:02 +000091 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +000092
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000093 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +000094 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +000095 self._io_refs = 0
96 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000097
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +000098 def __enter__(self):
99 return self
100
101 def __exit__(self, *args):
102 if not self._closed:
103 self.close()
104
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000105 def __repr__(self):
106 """Wrap __repr__() to reveal the real class name."""
107 s = _socket.socket.__repr__(self)
108 if s.startswith("<socket object"):
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000109 s = "<%s.%s%s%s" % (self.__class__.__module__,
110 self.__class__.__name__,
Antoine Pitroue033e062010-10-29 10:38:18 +0000111 getattr(self, '_closed', False) and " [closed] " or "",
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000112 s[7:])
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000113 return s
114
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000115 def dup(self):
116 """dup() -> socket object
117
118 Return a new socket object connected to the same system resource.
119 """
120 fd = dup(self.fileno())
121 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
122 sock.settimeout(self.gettimeout())
123 return sock
124
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000125 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000126 """accept() -> (socket object, address info)
127
128 Wait for an incoming connection. Return a new socket
129 representing the connection, and the address of the client.
130 For IP sockets, the address info is a pair (hostaddr, port).
131 """
132 fd, addr = self._accept()
Antoine Pitrou600232b2011-01-05 21:03:42 +0000133 sock = socket(self.family, self.type, self.proto, fileno=fd)
134 # Issue #7995: if no default timeout is set and the listening
135 # socket had a (non-zero) timeout, force the new socket in blocking
136 # mode to override platform-specific socket flags inheritance.
137 if getdefaulttimeout() is None and self.gettimeout():
138 sock.setblocking(True)
139 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000140
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000141 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000142 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000143 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000144
145 The arguments are as for io.open() after the filename,
146 except the only mode characters supported are 'r', 'w' and 'b'.
147 The semantics are similar too. (XXX refactor to share code?)
148 """
149 for c in mode:
150 if c not in {"r", "w", "b"}:
151 raise ValueError("invalid mode %r (only r, w, b allowed)")
152 writing = "w" in mode
153 reading = "r" in mode or not writing
154 assert reading or writing
155 binary = "b" in mode
156 rawmode = ""
157 if reading:
158 rawmode += "r"
159 if writing:
160 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000161 raw = SocketIO(self, rawmode)
162 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000163 if buffering is None:
164 buffering = -1
165 if buffering < 0:
166 buffering = io.DEFAULT_BUFFER_SIZE
167 if buffering == 0:
168 if not binary:
169 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000170 return raw
171 if reading and writing:
172 buffer = io.BufferedRWPair(raw, raw, buffering)
173 elif reading:
174 buffer = io.BufferedReader(raw, buffering)
175 else:
176 assert writing
177 buffer = io.BufferedWriter(raw, buffering)
178 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000179 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000180 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000181 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000182 return text
183
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000184 def _decref_socketios(self):
185 if self._io_refs > 0:
186 self._io_refs -= 1
187 if self._closed:
188 self.close()
189
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000190 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000191 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000192 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000193
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000194 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000195 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000196 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000197 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000198 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000199
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200200 def detach(self):
201 """detach() -> file descriptor
202
203 Close the socket object without closing the underlying file descriptor.
204 The object cannot be used after this call, but the file descriptor
205 can be reused for other purposes. The file descriptor is returned.
206 """
207 self._closed = True
208 return super().detach()
209
210
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000211def fromfd(fd, family, type, proto=0):
212 """ fromfd(fd, family, type[, proto]) -> socket object
213
214 Create a socket object from a duplicate of the given file
215 descriptor. The remaining arguments are the same as for socket().
216 """
217 nfd = dup(fd)
218 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000219
220
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000221if hasattr(_socket, "socketpair"):
222
223 def socketpair(family=None, type=SOCK_STREAM, proto=0):
224 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
225
226 Create a pair of socket objects from the sockets returned by the platform
227 socketpair() function.
228 The arguments are the same as for socket() except the default family is
229 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
230 """
231 if family is None:
232 try:
233 family = AF_UNIX
234 except NameError:
235 family = AF_INET
236 a, b = _socket.socketpair(family, type, proto)
237 a = socket(family, type, proto, a.detach())
238 b = socket(family, type, proto, b.detach())
239 return a, b
240
241
Antoine Pitrou98b46702010-09-18 22:59:00 +0000242_blocking_errnos = { EAGAIN, EWOULDBLOCK }
243
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000244class SocketIO(io.RawIOBase):
245
246 """Raw I/O implementation for stream sockets.
247
248 This class supports the makefile() method on sockets. It provides
249 the raw I/O interface on top of a socket object.
250 """
251
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000252 # One might wonder why not let FileIO do the job instead. There are two
253 # main reasons why FileIO is not adapted:
254 # - it wouldn't work under Windows (where you can't used read() and
255 # write() on a socket handle)
256 # - it wouldn't work with socket timeouts (FileIO would ignore the
257 # timeout and consider the socket non-blocking)
258
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000259 # XXX More docs
260
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000261 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000262 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000263 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000264 io.RawIOBase.__init__(self)
265 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000266 if "b" not in mode:
267 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000268 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000269 self._reading = "r" in mode
270 self._writing = "w" in mode
Antoine Pitrou5d5381e2011-02-25 23:14:08 +0000271 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000272
273 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000274 """Read up to len(b) bytes into the writable buffer *b* and return
275 the number of bytes read. If the socket is non-blocking and no bytes
276 are available, None is returned.
277
278 If *b* is non-empty, a 0 return value indicates that the connection
279 was shutdown at the other end.
280 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000281 self._checkClosed()
282 self._checkReadable()
Antoine Pitrou5d5381e2011-02-25 23:14:08 +0000283 if self._timeout_occurred:
284 raise IOError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000285 while True:
286 try:
287 return self._sock.recv_into(b)
Antoine Pitrou5d5381e2011-02-25 23:14:08 +0000288 except timeout:
289 self._timeout_occurred = True
290 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000291 except error as e:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000292 n = e.args[0]
293 if n == EINTR:
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000294 continue
Antoine Pitrou98b46702010-09-18 22:59:00 +0000295 if n in _blocking_errnos:
296 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000297 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000298
299 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000300 """Write the given bytes or bytearray object *b* to the socket
301 and return the number of bytes written. This can be less than
302 len(b) if not all data could be written. If the socket is
303 non-blocking and no bytes could be written None is returned.
304 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000305 self._checkClosed()
306 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000307 try:
308 return self._sock.send(b)
309 except error as e:
310 # XXX what about EINTR?
311 if e.args[0] in _blocking_errnos:
312 return None
313 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000314
315 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000316 """True if the SocketIO is open for reading.
317 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200318 if self.closed:
319 raise ValueError("I/O operation on closed socket.")
320 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000321
322 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000323 """True if the SocketIO is open for writing.
324 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200325 if self.closed:
326 raise ValueError("I/O operation on closed socket.")
327 return self._writing
328
329 def seekable(self):
330 """True if the SocketIO is open for seeking.
331 """
332 if self.closed:
333 raise ValueError("I/O operation on closed socket.")
334 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000335
336 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000337 """Return the file descriptor of the underlying socket.
338 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000339 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000340 return self._sock.fileno()
341
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000342 @property
343 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000344 if not self.closed:
345 return self.fileno()
346 else:
347 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000348
349 @property
350 def mode(self):
351 return self._mode
352
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000353 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000354 """Close the SocketIO object. This doesn't close the underlying
355 socket, except if all references to it have disappeared.
356 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000357 if self.closed:
358 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000359 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000360 self._sock._decref_socketios()
361 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000362
Fred Drakea6070f02000-08-16 14:14:32 +0000363
364def getfqdn(name=''):
365 """Get fully qualified domain name from name.
366
367 An empty argument is interpreted as meaning the local host.
368
369 First the hostname returned by gethostbyaddr() is checked, then
370 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000371 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000372 """
373 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000374 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000375 name = gethostname()
376 try:
377 hostname, aliases, ipaddrs = gethostbyaddr(name)
378 except error:
379 pass
380 else:
381 aliases.insert(0, hostname)
382 for name in aliases:
383 if '.' in name:
384 break
385 else:
386 name = hostname
387 return name
388
389
Georg Brandlf78e02b2008-06-10 17:40:04 +0000390_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000391
Gregory P. Smithb4066372010-01-03 03:28:29 +0000392def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
393 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000394 """Connect to *address* and return the socket object.
395
396 Convenience function. Connect to *address* (a 2-tuple ``(host,
397 port)``) and return the socket object. Passing the optional
398 *timeout* parameter will set the timeout on the socket instance
399 before attempting to connect. If no *timeout* is supplied, the
400 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000401 is used. If *source_address* is set it must be a tuple of (host, port)
402 for the socket to bind as a source address before making the connection.
403 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000404 """
405
Guido van Rossumd8faa362007-04-27 19:54:29 +0000406 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000407 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000408 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
409 af, socktype, proto, canonname, sa = res
410 sock = None
411 try:
412 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000413 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000414 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000415 if source_address:
416 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000417 sock.connect(sa)
418 return sock
419
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000420 except error as _:
421 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000422 if sock is not None:
423 sock.close()
424
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000425 if err is not None:
426 raise err
427 else:
428 raise error("getaddrinfo returns an empty list")