blob: dbb7cca67d69cebd2e885b825573edd6ca6301f4 [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)
Fred Drake70d566b2003-04-29 19:50:25 +000057
Benjamin Petersonef3e4c22009-04-11 19:48:14 +000058__all__ = ["getfqdn", "create_connection"]
Skip Montanaro0de65802001-02-15 22:15:14 +000059__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000060
61
62_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000063
Fred Drakea6070f02000-08-16 14:14:32 +000064# WSA error codes
65if sys.platform.lower().startswith("win"):
66 errorTab = {}
67 errorTab[10004] = "The operation was interrupted."
68 errorTab[10009] = "A bad file handle was passed."
69 errorTab[10013] = "Permission denied."
70 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
71 errorTab[10022] = "An invalid operation was attempted."
72 errorTab[10035] = "The socket operation would block"
73 errorTab[10036] = "A blocking operation is already in progress."
74 errorTab[10048] = "The network address is in use."
75 errorTab[10054] = "The connection has been reset."
76 errorTab[10058] = "The network has been shut down."
77 errorTab[10060] = "The operation timed out."
78 errorTab[10061] = "Connection refused."
79 errorTab[10063] = "The name is too long."
80 errorTab[10064] = "The host is down."
81 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +000082 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +000083
Fred Drakea6070f02000-08-16 14:14:32 +000084
Guido van Rossum7d0a8262007-05-21 23:13:11 +000085class socket(_socket.socket):
86
87 """A subclass of _socket.socket adding the makefile() method."""
88
Guido van Rossum86bc33c2007-11-14 22:32:02 +000089 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +000090
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000091 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +000092 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +000093 self._io_refs = 0
94 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +000095
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +000096 def __enter__(self):
97 return self
98
99 def __exit__(self, *args):
100 if not self._closed:
101 self.close()
102
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000103 def __repr__(self):
104 """Wrap __repr__() to reveal the real class name."""
105 s = _socket.socket.__repr__(self)
106 if s.startswith("<socket object"):
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000107 s = "<%s.%s%s%s" % (self.__class__.__module__,
108 self.__class__.__name__,
109 (self._closed and " [closed] ") or "",
110 s[7:])
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000111 return s
112
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000113 def dup(self):
114 """dup() -> socket object
115
116 Return a new socket object connected to the same system resource.
117 """
118 fd = dup(self.fileno())
119 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
120 sock.settimeout(self.gettimeout())
121 return sock
122
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000123 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000124 """accept() -> (socket object, address info)
125
126 Wait for an incoming connection. Return a new socket
127 representing the connection, and the address of the client.
128 For IP sockets, the address info is a pair (hostaddr, port).
129 """
130 fd, addr = self._accept()
131 return socket(self.family, self.type, self.proto, fileno=fd), addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000132
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000133 def makefile(self, mode="r", buffering=None, *,
134 encoding=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000135 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000136
137 The arguments are as for io.open() after the filename,
138 except the only mode characters supported are 'r', 'w' and 'b'.
139 The semantics are similar too. (XXX refactor to share code?)
140 """
141 for c in mode:
142 if c not in {"r", "w", "b"}:
143 raise ValueError("invalid mode %r (only r, w, b allowed)")
144 writing = "w" in mode
145 reading = "r" in mode or not writing
146 assert reading or writing
147 binary = "b" in mode
148 rawmode = ""
149 if reading:
150 rawmode += "r"
151 if writing:
152 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000153 raw = SocketIO(self, rawmode)
154 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000155 if buffering is None:
156 buffering = -1
157 if buffering < 0:
158 buffering = io.DEFAULT_BUFFER_SIZE
159 if buffering == 0:
160 if not binary:
161 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000162 return raw
163 if reading and writing:
164 buffer = io.BufferedRWPair(raw, raw, buffering)
165 elif reading:
166 buffer = io.BufferedReader(raw, buffering)
167 else:
168 assert writing
169 buffer = io.BufferedWriter(raw, buffering)
170 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000171 return buffer
172 text = io.TextIOWrapper(buffer, encoding, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000173 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000174 return text
175
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000176 def _decref_socketios(self):
177 if self._io_refs > 0:
178 self._io_refs -= 1
179 if self._closed:
180 self.close()
181
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000182 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000183 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000184 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000185
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000186 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000187 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000188 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000189 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000190 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000191
192def fromfd(fd, family, type, proto=0):
193 """ fromfd(fd, family, type[, proto]) -> socket object
194
195 Create a socket object from a duplicate of the given file
196 descriptor. The remaining arguments are the same as for socket().
197 """
198 nfd = dup(fd)
199 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000200
201
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000202if hasattr(_socket, "socketpair"):
203
204 def socketpair(family=None, type=SOCK_STREAM, proto=0):
205 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
206
207 Create a pair of socket objects from the sockets returned by the platform
208 socketpair() function.
209 The arguments are the same as for socket() except the default family is
210 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
211 """
212 if family is None:
213 try:
214 family = AF_UNIX
215 except NameError:
216 family = AF_INET
217 a, b = _socket.socketpair(family, type, proto)
218 a = socket(family, type, proto, a.detach())
219 b = socket(family, type, proto, b.detach())
220 return a, b
221
222
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000223class SocketIO(io.RawIOBase):
224
225 """Raw I/O implementation for stream sockets.
226
227 This class supports the makefile() method on sockets. It provides
228 the raw I/O interface on top of a socket object.
229 """
230
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000231 # One might wonder why not let FileIO do the job instead. There are two
232 # main reasons why FileIO is not adapted:
233 # - it wouldn't work under Windows (where you can't used read() and
234 # write() on a socket handle)
235 # - it wouldn't work with socket timeouts (FileIO would ignore the
236 # timeout and consider the socket non-blocking)
237
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000238 # XXX More docs
239
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000240 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000241 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000242 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000243 io.RawIOBase.__init__(self)
244 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000245 if "b" not in mode:
246 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000247 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000248 self._reading = "r" in mode
249 self._writing = "w" in mode
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000250
251 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000252 """Read up to len(b) bytes into the writable buffer *b* and return
253 the number of bytes read. If the socket is non-blocking and no bytes
254 are available, None is returned.
255
256 If *b* is non-empty, a 0 return value indicates that the connection
257 was shutdown at the other end.
258 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000259 self._checkClosed()
260 self._checkReadable()
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000261 while True:
262 try:
263 return self._sock.recv_into(b)
264 except error as e:
265 if e.args[0] == EINTR:
266 continue
267 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000268
269 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000270 """Write the given bytes or bytearray object *b* to the socket
271 and return the number of bytes written. This can be less than
272 len(b) if not all data could be written. If the socket is
273 non-blocking and no bytes could be written None is returned.
274 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000275 self._checkClosed()
276 self._checkWritable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000277 return self._sock.send(b)
278
279 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000280 """True if the SocketIO is open for reading.
281 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000282 return self._reading and not self.closed
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000283
284 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000285 """True if the SocketIO is open for writing.
286 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000287 return self._writing and not self.closed
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000288
289 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000290 """Return the file descriptor of the underlying socket.
291 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000292 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000293 return self._sock.fileno()
294
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000295 @property
296 def name(self):
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000297 return self.fileno()
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000298
299 @property
300 def mode(self):
301 return self._mode
302
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000303 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000304 """Close the SocketIO object. This doesn't close the underlying
305 socket, except if all references to it have disappeared.
306 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000307 if self.closed:
308 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000309 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000310 self._sock._decref_socketios()
311 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000312
Fred Drakea6070f02000-08-16 14:14:32 +0000313
314def getfqdn(name=''):
315 """Get fully qualified domain name from name.
316
317 An empty argument is interpreted as meaning the local host.
318
319 First the hostname returned by gethostbyaddr() is checked, then
320 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000321 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000322 """
323 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000324 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000325 name = gethostname()
326 try:
327 hostname, aliases, ipaddrs = gethostbyaddr(name)
328 except error:
329 pass
330 else:
331 aliases.insert(0, hostname)
332 for name in aliases:
333 if '.' in name:
334 break
335 else:
336 name = hostname
337 return name
338
339
Georg Brandlf78e02b2008-06-10 17:40:04 +0000340_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000341
Gregory P. Smithb4066372010-01-03 03:28:29 +0000342def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
343 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000344 """Connect to *address* and return the socket object.
345
346 Convenience function. Connect to *address* (a 2-tuple ``(host,
347 port)``) and return the socket object. Passing the optional
348 *timeout* parameter will set the timeout on the socket instance
349 before attempting to connect. If no *timeout* is supplied, the
350 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000351 is used. If *source_address* is set it must be a tuple of (host, port)
352 for the socket to bind as a source address before making the connection.
353 An host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000354 """
355
Guido van Rossumd8faa362007-04-27 19:54:29 +0000356 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000357 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000358 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
359 af, socktype, proto, canonname, sa = res
360 sock = None
361 try:
362 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000363 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000364 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000365 if source_address:
366 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000367 sock.connect(sa)
368 return sock
369
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000370 except error as _:
371 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000372 if sock is not None:
373 sock.close()
374
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000375 if err is not None:
376 raise err
377 else:
378 raise error("getaddrinfo returns an empty list")