blob: 813f4ef5c3e1f579dd0d5f35e39a2eb6cf034595 [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 [*]
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +000015fromshare() -- create a socket object from data received from socket.share() [*]
Fred Drakea6070f02000-08-16 14:14:32 +000016gethostname() -- return the current hostname
17gethostbyname() -- map a hostname to its IP number
18gethostbyaddr() -- map an IP number or hostname to DNS info
19getservbyname() -- map a service name and a protocol name to a port number
Mark Dickinson5c91bf32009-06-02 07:41:26 +000020getprotobyname() -- map a protocol name (e.g. 'tcp') to a number
Fred Drakea6070f02000-08-16 14:14:32 +000021ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order
22htons(), htonl() -- convert 16, 32 bit int from host to network byte order
23inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format
24inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +000025socket.getdefaulttimeout() -- get the default timeout value
26socket.setdefaulttimeout() -- set the default timeout value
Gregory P. Smithb4066372010-01-03 03:28:29 +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
Ethan Furman7184bac2014-10-14 18:56:53 -070038IntEnum constants:
Fred Drakea6070f02000-08-16 14:14:32 +000039
40AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
41SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
42
Ethan Furman7184bac2014-10-14 18:56:53 -070043Integer constants:
44
Fred Drakea6070f02000-08-16 14:14:32 +000045Many other constants may be defined; these may be used in calls to
46the setsockopt() and getsockopt() methods.
47"""
48
Tim Peters18e67782002-02-17 04:25:24 +000049import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000050from _socket import *
Tim Peters18e67782002-02-17 04:25:24 +000051
Giampaolo Rodola'915d1412014-06-11 03:54:30 +020052import os, sys, io, selectors
Ethan Furman40bed8a2016-09-11 13:34:42 -070053from enum import IntEnum, IntFlag
Fred Drakea6070f02000-08-16 14:14:32 +000054
Fred Drake70d566b2003-04-29 19:50:25 +000055try:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000056 import errno
Brett Cannoncd171c82013-07-04 17:43:24 -040057except ImportError:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000058 errno = None
59EBADF = getattr(errno, 'EBADF', 9)
Antoine Pitrou98b46702010-09-18 22:59:00 +000060EAGAIN = getattr(errno, 'EAGAIN', 11)
61EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
Fred Drake70d566b2003-04-29 19:50:25 +000062
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +020063__all__ = ["fromfd", "getfqdn", "create_connection", "create_server",
64 "has_dualstack_ipv6", "AddressFamily", "SocketKind"]
Skip Montanaro0de65802001-02-15 22:15:14 +000065__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000066
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070067# Set up the socket.AF_* socket.SOCK_* constants as members of IntEnums for
68# nicer string representations.
69# Note that _socket only knows about the integer values. The public interface
70# in this module understands the enums and translates them back from integers
71# where needed (e.g. .family property of a socket object).
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070072
orlnub1230fb9fad2018-09-12 20:28:53 +030073IntEnum._convert_(
Ethan Furman24e837f2015-03-18 17:27:57 -070074 'AddressFamily',
75 __name__,
76 lambda C: C.isupper() and C.startswith('AF_'))
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070077
orlnub1230fb9fad2018-09-12 20:28:53 +030078IntEnum._convert_(
Ethan Furman24e837f2015-03-18 17:27:57 -070079 'SocketKind',
80 __name__,
81 lambda C: C.isupper() and C.startswith('SOCK_'))
Charles-François Natali98c745a2014-10-14 21:22:44 +010082
orlnub1230fb9fad2018-09-12 20:28:53 +030083IntFlag._convert_(
Ethan Furman40bed8a2016-09-11 13:34:42 -070084 'MsgFlag',
85 __name__,
86 lambda C: C.isupper() and C.startswith('MSG_'))
87
orlnub1230fb9fad2018-09-12 20:28:53 +030088IntFlag._convert_(
Ethan Furman40bed8a2016-09-11 13:34:42 -070089 'AddressInfo',
90 __name__,
91 lambda C: C.isupper() and C.startswith('AI_'))
92
Charles-François Natali98c745a2014-10-14 21:22:44 +010093_LOCALHOST = '127.0.0.1'
94_LOCALHOST_V6 = '::1'
95
96
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070097def _intenum_converter(value, enum_klass):
98 """Convert a numeric family value to an IntEnum member.
99
100 If it's not a known member, return the numeric value itself.
101 """
102 try:
103 return enum_klass(value)
104 except ValueError:
105 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000106
107_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +0000108
Fred Drakea6070f02000-08-16 14:14:32 +0000109# WSA error codes
110if sys.platform.lower().startswith("win"):
111 errorTab = {}
Steve Dowereb021962019-09-09 03:36:04 -0700112 errorTab[6] = "Specified event object handle is invalid."
113 errorTab[8] = "Insufficient memory available."
114 errorTab[87] = "One or more parameters are invalid."
115 errorTab[995] = "Overlapped operation aborted."
116 errorTab[996] = "Overlapped I/O event object not in signaled state."
117 errorTab[997] = "Overlapped operation will complete later."
Fred Drakea6070f02000-08-16 14:14:32 +0000118 errorTab[10004] = "The operation was interrupted."
119 errorTab[10009] = "A bad file handle was passed."
120 errorTab[10013] = "Permission denied."
Steve Dowereb021962019-09-09 03:36:04 -0700121 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
Fred Drakea6070f02000-08-16 14:14:32 +0000122 errorTab[10022] = "An invalid operation was attempted."
Steve Dowereb021962019-09-09 03:36:04 -0700123 errorTab[10024] = "Too many open files."
Fred Drakea6070f02000-08-16 14:14:32 +0000124 errorTab[10035] = "The socket operation would block"
125 errorTab[10036] = "A blocking operation is already in progress."
Steve Dowereb021962019-09-09 03:36:04 -0700126 errorTab[10037] = "Operation already in progress."
127 errorTab[10038] = "Socket operation on nonsocket."
128 errorTab[10039] = "Destination address required."
129 errorTab[10040] = "Message too long."
130 errorTab[10041] = "Protocol wrong type for socket."
131 errorTab[10042] = "Bad protocol option."
132 errorTab[10043] = "Protocol not supported."
133 errorTab[10044] = "Socket type not supported."
134 errorTab[10045] = "Operation not supported."
135 errorTab[10046] = "Protocol family not supported."
136 errorTab[10047] = "Address family not supported by protocol family."
Fred Drakea6070f02000-08-16 14:14:32 +0000137 errorTab[10048] = "The network address is in use."
Steve Dowereb021962019-09-09 03:36:04 -0700138 errorTab[10049] = "Cannot assign requested address."
139 errorTab[10050] = "Network is down."
140 errorTab[10051] = "Network is unreachable."
141 errorTab[10052] = "Network dropped connection on reset."
142 errorTab[10053] = "Software caused connection abort."
Fred Drakea6070f02000-08-16 14:14:32 +0000143 errorTab[10054] = "The connection has been reset."
Steve Dowereb021962019-09-09 03:36:04 -0700144 errorTab[10055] = "No buffer space available."
145 errorTab[10056] = "Socket is already connected."
146 errorTab[10057] = "Socket is not connected."
Fred Drakea6070f02000-08-16 14:14:32 +0000147 errorTab[10058] = "The network has been shut down."
Steve Dowereb021962019-09-09 03:36:04 -0700148 errorTab[10059] = "Too many references."
Fred Drakea6070f02000-08-16 14:14:32 +0000149 errorTab[10060] = "The operation timed out."
150 errorTab[10061] = "Connection refused."
Steve Dowereb021962019-09-09 03:36:04 -0700151 errorTab[10062] = "Cannot translate name."
Fred Drakea6070f02000-08-16 14:14:32 +0000152 errorTab[10063] = "The name is too long."
153 errorTab[10064] = "The host is down."
154 errorTab[10065] = "The host is unreachable."
Steve Dowereb021962019-09-09 03:36:04 -0700155 errorTab[10066] = "Directory not empty."
156 errorTab[10067] = "Too many processes."
157 errorTab[10068] = "User quota exceeded."
158 errorTab[10069] = "Disk quota exceeded."
159 errorTab[10070] = "Stale file handle reference."
160 errorTab[10071] = "Item is remote."
161 errorTab[10091] = "Network subsystem is unavailable."
162 errorTab[10092] = "Winsock.dll version out of range."
163 errorTab[10093] = "Successful WSAStartup not yet performed."
164 errorTab[10101] = "Graceful shutdown in progress."
165 errorTab[10102] = "No more results from WSALookupServiceNext."
166 errorTab[10103] = "Call has been canceled."
167 errorTab[10104] = "Procedure call table is invalid."
168 errorTab[10105] = "Service provider is invalid."
169 errorTab[10106] = "Service provider failed to initialize."
170 errorTab[10107] = "System call failure."
171 errorTab[10108] = "Service not found."
172 errorTab[10109] = "Class type not found."
173 errorTab[10110] = "No more results from WSALookupServiceNext."
174 errorTab[10111] = "Call was canceled."
175 errorTab[10112] = "Database query was refused."
176 errorTab[11001] = "Host not found."
177 errorTab[11002] = "Nonauthoritative host not found."
178 errorTab[11003] = "This is a nonrecoverable error."
179 errorTab[11004] = "Valid name, no data record requested type."
180 errorTab[11005] = "QoS receivers."
181 errorTab[11006] = "QoS senders."
182 errorTab[11007] = "No QoS senders."
183 errorTab[11008] = "QoS no receivers."
184 errorTab[11009] = "QoS request confirmed."
185 errorTab[11010] = "QoS admission error."
186 errorTab[11011] = "QoS policy failure."
187 errorTab[11012] = "QoS bad style."
188 errorTab[11013] = "QoS bad object."
189 errorTab[11014] = "QoS traffic control error."
190 errorTab[11015] = "QoS generic error."
191 errorTab[11016] = "QoS service type error."
192 errorTab[11017] = "QoS flowspec error."
193 errorTab[11018] = "Invalid QoS provider buffer."
194 errorTab[11019] = "Invalid QoS filter style."
195 errorTab[11020] = "Invalid QoS filter style."
196 errorTab[11021] = "Incorrect QoS filter count."
197 errorTab[11022] = "Invalid QoS object length."
198 errorTab[11023] = "Incorrect QoS flow count."
199 errorTab[11024] = "Unrecognized QoS object."
200 errorTab[11025] = "Invalid QoS policy object."
201 errorTab[11026] = "Invalid QoS flow descriptor."
202 errorTab[11027] = "Invalid QoS provider-specific flowspec."
203 errorTab[11028] = "Invalid QoS provider-specific filterspec."
204 errorTab[11029] = "Invalid QoS shape discard mode object."
205 errorTab[11030] = "Invalid QoS shaping rate object."
206 errorTab[11031] = "Reserved policy QoS element type."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000207 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000208
Fred Drakea6070f02000-08-16 14:14:32 +0000209
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200210class _GiveupOnSendfile(Exception): pass
211
212
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000213class socket(_socket.socket):
214
215 """A subclass of _socket.socket adding the makefile() method."""
216
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000217 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000218
Christian Heimesb6e43af2018-01-29 22:37:58 +0100219 def __init__(self, family=-1, type=-1, proto=-1, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700220 # For user code address family and type values are IntEnum members, but
221 # for the underlying _socket.socket they're just integers. The
222 # constructor of _socket.socket converts the given argument to an
223 # integer automatically.
Christian Heimesb6e43af2018-01-29 22:37:58 +0100224 if fileno is None:
225 if family == -1:
226 family = AF_INET
227 if type == -1:
228 type = SOCK_STREAM
229 if proto == -1:
230 proto = 0
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000231 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000232 self._io_refs = 0
233 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000234
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000235 def __enter__(self):
236 return self
237
238 def __exit__(self, *args):
239 if not self._closed:
240 self.close()
241
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000242 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200243 """Wrap __repr__() to reveal the real class name and socket
244 address(es).
245 """
246 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200247 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200248 % (self.__class__.__module__,
Serhiy Storchaka521e5862014-07-22 15:00:37 +0300249 self.__class__.__qualname__,
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200250 " [closed]" if closed else "",
251 self.fileno(),
252 self.family,
253 self.type,
254 self.proto)
255 if not closed:
256 try:
257 laddr = self.getsockname()
258 if laddr:
259 s += ", laddr=%s" % str(laddr)
260 except error:
261 pass
262 try:
263 raddr = self.getpeername()
264 if raddr:
265 s += ", raddr=%s" % str(raddr)
266 except error:
267 pass
268 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000269 return s
270
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100271 def __getstate__(self):
Serhiy Storchaka0353b4e2018-10-31 02:28:07 +0200272 raise TypeError(f"cannot pickle {self.__class__.__name__!r} object")
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100273
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000274 def dup(self):
275 """dup() -> socket object
276
Victor Stinnerdaf45552013-08-28 00:53:59 +0200277 Duplicate the socket. Return a new socket object connected to the same
278 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000279 """
280 fd = dup(self.fileno())
281 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
282 sock.settimeout(self.gettimeout())
283 return sock
284
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000285 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000286 """accept() -> (socket object, address info)
287
288 Wait for an incoming connection. Return a new socket
289 representing the connection, and the address of the client.
290 For IP sockets, the address info is a pair (hostaddr, port).
291 """
292 fd, addr = self._accept()
Yury Selivanov98181422017-12-18 20:02:54 -0500293 sock = socket(self.family, self.type, self.proto, fileno=fd)
Antoine Pitrou600232b2011-01-05 21:03:42 +0000294 # Issue #7995: if no default timeout is set and the listening
295 # socket had a (non-zero) timeout, force the new socket in blocking
296 # mode to override platform-specific socket flags inheritance.
297 if getdefaulttimeout() is None and self.gettimeout():
298 sock.setblocking(True)
299 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000300
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000301 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000302 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000303 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000304
Berker Peksag3fe64d02016-02-18 17:34:00 +0200305 The arguments are as for io.open() after the filename, except the only
306 supported mode values are 'r' (default), 'w' and 'b'.
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000307 """
Berker Peksag3fe64d02016-02-18 17:34:00 +0200308 # XXX refactor to share code?
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200309 if not set(mode) <= {"r", "w", "b"}:
310 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000311 writing = "w" in mode
312 reading = "r" in mode or not writing
313 assert reading or writing
314 binary = "b" in mode
315 rawmode = ""
316 if reading:
317 rawmode += "r"
318 if writing:
319 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000320 raw = SocketIO(self, rawmode)
321 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000322 if buffering is None:
323 buffering = -1
324 if buffering < 0:
325 buffering = io.DEFAULT_BUFFER_SIZE
326 if buffering == 0:
327 if not binary:
328 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000329 return raw
330 if reading and writing:
331 buffer = io.BufferedRWPair(raw, raw, buffering)
332 elif reading:
333 buffer = io.BufferedReader(raw, buffering)
334 else:
335 assert writing
336 buffer = io.BufferedWriter(raw, buffering)
337 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000338 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000339 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000340 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000341 return text
342
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200343 if hasattr(os, 'sendfile'):
344
345 def _sendfile_use_sendfile(self, file, offset=0, count=None):
346 self._check_sendfile_params(file, offset, count)
347 sockno = self.fileno()
348 try:
349 fileno = file.fileno()
350 except (AttributeError, io.UnsupportedOperation) as err:
351 raise _GiveupOnSendfile(err) # not a regular file
352 try:
353 fsize = os.fstat(fileno).st_size
Berker Peksagbcfb35f2016-09-17 23:22:06 +0300354 except OSError as err:
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200355 raise _GiveupOnSendfile(err) # not a regular file
356 if not fsize:
357 return 0 # empty file
Miss Islington (bot)938c00c2019-10-01 00:55:02 -0700358 # Truncate to 1GiB to avoid OverflowError, see bpo-38319.
359 blocksize = min(count or fsize, 2 ** 30)
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200360 timeout = self.gettimeout()
361 if timeout == 0:
362 raise ValueError("non-blocking sockets are not supported")
363 # poll/select have the advantage of not requiring any
364 # extra file descriptor, contrarily to epoll/kqueue
365 # (also, they require a single syscall).
366 if hasattr(selectors, 'PollSelector'):
367 selector = selectors.PollSelector()
368 else:
369 selector = selectors.SelectSelector()
370 selector.register(sockno, selectors.EVENT_WRITE)
371
372 total_sent = 0
373 # localize variable access to minimize overhead
374 selector_select = selector.select
375 os_sendfile = os.sendfile
376 try:
377 while True:
378 if timeout and not selector_select(timeout):
379 raise _socket.timeout('timed out')
380 if count:
381 blocksize = count - total_sent
382 if blocksize <= 0:
383 break
384 try:
385 sent = os_sendfile(sockno, fileno, offset, blocksize)
386 except BlockingIOError:
387 if not timeout:
388 # Block until the socket is ready to send some
389 # data; avoids hogging CPU resources.
390 selector_select()
391 continue
392 except OSError as err:
393 if total_sent == 0:
394 # We can get here for different reasons, the main
395 # one being 'file' is not a regular mmap(2)-like
396 # file, in which case we'll fall back on using
397 # plain send().
398 raise _GiveupOnSendfile(err)
399 raise err from None
400 else:
401 if sent == 0:
402 break # EOF
403 offset += sent
404 total_sent += sent
405 return total_sent
406 finally:
407 if total_sent > 0 and hasattr(file, 'seek'):
408 file.seek(offset)
409 else:
410 def _sendfile_use_sendfile(self, file, offset=0, count=None):
411 raise _GiveupOnSendfile(
412 "os.sendfile() not available on this platform")
413
414 def _sendfile_use_send(self, file, offset=0, count=None):
415 self._check_sendfile_params(file, offset, count)
416 if self.gettimeout() == 0:
417 raise ValueError("non-blocking sockets are not supported")
418 if offset:
419 file.seek(offset)
420 blocksize = min(count, 8192) if count else 8192
421 total_sent = 0
422 # localize variable access to minimize overhead
423 file_read = file.read
424 sock_send = self.send
425 try:
426 while True:
427 if count:
428 blocksize = min(count - total_sent, blocksize)
429 if blocksize <= 0:
430 break
431 data = memoryview(file_read(blocksize))
432 if not data:
433 break # EOF
434 while True:
435 try:
436 sent = sock_send(data)
437 except BlockingIOError:
438 continue
439 else:
440 total_sent += sent
441 if sent < len(data):
442 data = data[sent:]
443 else:
444 break
445 return total_sent
446 finally:
447 if total_sent > 0 and hasattr(file, 'seek'):
448 file.seek(offset + total_sent)
449
450 def _check_sendfile_params(self, file, offset, count):
451 if 'b' not in getattr(file, 'mode', 'b'):
452 raise ValueError("file should be opened in binary mode")
453 if not self.type & SOCK_STREAM:
454 raise ValueError("only SOCK_STREAM type sockets are supported")
455 if count is not None:
456 if not isinstance(count, int):
457 raise TypeError(
458 "count must be a positive integer (got {!r})".format(count))
459 if count <= 0:
460 raise ValueError(
461 "count must be a positive integer (got {!r})".format(count))
462
463 def sendfile(self, file, offset=0, count=None):
464 """sendfile(file[, offset[, count]]) -> sent
465
466 Send a file until EOF is reached by using high-performance
467 os.sendfile() and return the total number of bytes which
468 were sent.
469 *file* must be a regular file object opened in binary mode.
470 If os.sendfile() is not available (e.g. Windows) or file is
471 not a regular file socket.send() will be used instead.
472 *offset* tells from where to start reading the file.
473 If specified, *count* is the total number of bytes to transmit
474 as opposed to sending the file until EOF is reached.
475 File position is updated on return or also in case of error in
476 which case file.tell() can be used to figure out the number of
477 bytes which were sent.
478 The socket must be of SOCK_STREAM type.
479 Non-blocking sockets are not supported.
480 """
481 try:
482 return self._sendfile_use_sendfile(file, offset, count)
483 except _GiveupOnSendfile:
484 return self._sendfile_use_send(file, offset, count)
485
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000486 def _decref_socketios(self):
487 if self._io_refs > 0:
488 self._io_refs -= 1
489 if self._closed:
490 self.close()
491
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000492 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000493 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000494 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000495
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000496 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000497 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000498 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000499 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000500 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000501
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200502 def detach(self):
503 """detach() -> file descriptor
504
505 Close the socket object without closing the underlying file descriptor.
506 The object cannot be used after this call, but the file descriptor
507 can be reused for other purposes. The file descriptor is returned.
508 """
509 self._closed = True
510 return super().detach()
511
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700512 @property
513 def family(self):
514 """Read-only access to the address family for this socket.
515 """
516 return _intenum_converter(super().family, AddressFamily)
517
518 @property
519 def type(self):
520 """Read-only access to the socket type.
521 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700522 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700523
Victor Stinnerdaf45552013-08-28 00:53:59 +0200524 if os.name == 'nt':
525 def get_inheritable(self):
526 return os.get_handle_inheritable(self.fileno())
527 def set_inheritable(self, inheritable):
528 os.set_handle_inheritable(self.fileno(), inheritable)
529 else:
530 def get_inheritable(self):
531 return os.get_inheritable(self.fileno())
532 def set_inheritable(self, inheritable):
533 os.set_inheritable(self.fileno(), inheritable)
534 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
535 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
536
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000537def fromfd(fd, family, type, proto=0):
538 """ fromfd(fd, family, type[, proto]) -> socket object
539
540 Create a socket object from a duplicate of the given file
541 descriptor. The remaining arguments are the same as for socket().
542 """
543 nfd = dup(fd)
544 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000545
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000546if hasattr(_socket.socket, "share"):
547 def fromshare(info):
548 """ fromshare(info) -> socket object
549
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500550 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000551 socket.share(pid).
552 """
553 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700554 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000555
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000556if hasattr(_socket, "socketpair"):
557
558 def socketpair(family=None, type=SOCK_STREAM, proto=0):
559 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
560
561 Create a pair of socket objects from the sockets returned by the platform
562 socketpair() function.
563 The arguments are the same as for socket() except the default family is
564 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
565 """
566 if family is None:
567 try:
568 family = AF_UNIX
569 except NameError:
570 family = AF_INET
571 a, b = _socket.socketpair(family, type, proto)
572 a = socket(family, type, proto, a.detach())
573 b = socket(family, type, proto, b.detach())
574 return a, b
575
Charles-François Natali98c745a2014-10-14 21:22:44 +0100576else:
577
578 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
579 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
580 if family == AF_INET:
581 host = _LOCALHOST
582 elif family == AF_INET6:
583 host = _LOCALHOST_V6
584 else:
585 raise ValueError("Only AF_INET and AF_INET6 socket address families "
586 "are supported")
587 if type != SOCK_STREAM:
588 raise ValueError("Only SOCK_STREAM socket type is supported")
589 if proto != 0:
590 raise ValueError("Only protocol zero is supported")
591
592 # We create a connected TCP socket. Note the trick with
593 # setblocking(False) that prevents us from having to create a thread.
594 lsock = socket(family, type, proto)
595 try:
596 lsock.bind((host, 0))
597 lsock.listen()
598 # On IPv6, ignore flow_info and scope_id
599 addr, port = lsock.getsockname()[:2]
600 csock = socket(family, type, proto)
601 try:
602 csock.setblocking(False)
603 try:
604 csock.connect((addr, port))
605 except (BlockingIOError, InterruptedError):
606 pass
607 csock.setblocking(True)
608 ssock, _ = lsock.accept()
609 except:
610 csock.close()
611 raise
612 finally:
613 lsock.close()
614 return (ssock, csock)
Victor Stinner3da57432016-08-17 14:40:08 +0200615 __all__.append("socketpair")
Charles-François Natali98c745a2014-10-14 21:22:44 +0100616
617socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
618Create a pair of socket objects from the sockets returned by the platform
619socketpair() function.
620The arguments are the same as for socket() except the default family is AF_UNIX
621if defined on the platform; otherwise, the default is AF_INET.
622"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000623
Antoine Pitrou98b46702010-09-18 22:59:00 +0000624_blocking_errnos = { EAGAIN, EWOULDBLOCK }
625
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000626class SocketIO(io.RawIOBase):
627
628 """Raw I/O implementation for stream sockets.
629
630 This class supports the makefile() method on sockets. It provides
631 the raw I/O interface on top of a socket object.
632 """
633
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000634 # One might wonder why not let FileIO do the job instead. There are two
635 # main reasons why FileIO is not adapted:
636 # - it wouldn't work under Windows (where you can't used read() and
637 # write() on a socket handle)
638 # - it wouldn't work with socket timeouts (FileIO would ignore the
639 # timeout and consider the socket non-blocking)
640
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000641 # XXX More docs
642
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000643 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000644 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000645 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000646 io.RawIOBase.__init__(self)
647 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000648 if "b" not in mode:
649 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000650 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000651 self._reading = "r" in mode
652 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000653 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000654
655 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000656 """Read up to len(b) bytes into the writable buffer *b* and return
657 the number of bytes read. If the socket is non-blocking and no bytes
658 are available, None is returned.
659
660 If *b* is non-empty, a 0 return value indicates that the connection
661 was shutdown at the other end.
662 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000663 self._checkClosed()
664 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000665 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200666 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000667 while True:
668 try:
669 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000670 except timeout:
671 self._timeout_occurred = True
672 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000673 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200674 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000675 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000676 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000677
678 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000679 """Write the given bytes or bytearray object *b* to the socket
680 and return the number of bytes written. This can be less than
681 len(b) if not all data could be written. If the socket is
682 non-blocking and no bytes could be written None is returned.
683 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000684 self._checkClosed()
685 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000686 try:
687 return self._sock.send(b)
688 except error as e:
689 # XXX what about EINTR?
690 if e.args[0] in _blocking_errnos:
691 return None
692 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000693
694 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000695 """True if the SocketIO is open for reading.
696 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200697 if self.closed:
698 raise ValueError("I/O operation on closed socket.")
699 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000700
701 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000702 """True if the SocketIO is open for writing.
703 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200704 if self.closed:
705 raise ValueError("I/O operation on closed socket.")
706 return self._writing
707
708 def seekable(self):
709 """True if the SocketIO is open for seeking.
710 """
711 if self.closed:
712 raise ValueError("I/O operation on closed socket.")
713 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000714
715 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000716 """Return the file descriptor of the underlying socket.
717 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000718 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000719 return self._sock.fileno()
720
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000721 @property
722 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000723 if not self.closed:
724 return self.fileno()
725 else:
726 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000727
728 @property
729 def mode(self):
730 return self._mode
731
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000732 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000733 """Close the SocketIO object. This doesn't close the underlying
734 socket, except if all references to it have disappeared.
735 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000736 if self.closed:
737 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000738 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000739 self._sock._decref_socketios()
740 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000741
Fred Drakea6070f02000-08-16 14:14:32 +0000742
743def getfqdn(name=''):
744 """Get fully qualified domain name from name.
745
746 An empty argument is interpreted as meaning the local host.
747
748 First the hostname returned by gethostbyaddr() is checked, then
749 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000750 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000751 """
752 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000753 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000754 name = gethostname()
755 try:
756 hostname, aliases, ipaddrs = gethostbyaddr(name)
757 except error:
758 pass
759 else:
760 aliases.insert(0, hostname)
761 for name in aliases:
762 if '.' in name:
763 break
764 else:
765 name = hostname
766 return name
767
768
Georg Brandlf78e02b2008-06-10 17:40:04 +0000769_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000770
Gregory P. Smithb4066372010-01-03 03:28:29 +0000771def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
772 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000773 """Connect to *address* and return the socket object.
774
775 Convenience function. Connect to *address* (a 2-tuple ``(host,
776 port)``) and return the socket object. Passing the optional
777 *timeout* parameter will set the timeout on the socket instance
778 before attempting to connect. If no *timeout* is supplied, the
779 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000780 is used. If *source_address* is set it must be a tuple of (host, port)
781 for the socket to bind as a source address before making the connection.
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300782 A host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000783 """
784
Guido van Rossumd8faa362007-04-27 19:54:29 +0000785 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000786 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000787 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
788 af, socktype, proto, canonname, sa = res
789 sock = None
790 try:
791 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000792 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000793 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000794 if source_address:
795 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000796 sock.connect(sa)
Victor Stinneracb9fa72017-09-13 10:10:10 -0700797 # Break explicitly a reference cycle
798 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000799 return sock
800
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000801 except error as _:
802 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000803 if sock is not None:
804 sock.close()
805
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000806 if err is not None:
807 raise err
808 else:
809 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700810
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200811
812def has_dualstack_ipv6():
813 """Return True if the platform supports creating a SOCK_STREAM socket
814 which can handle both AF_INET and AF_INET6 (IPv4 / IPv6) connections.
815 """
816 if not has_ipv6 \
817 or not hasattr(_socket, 'IPPROTO_IPV6') \
818 or not hasattr(_socket, 'IPV6_V6ONLY'):
819 return False
820 try:
821 with socket(AF_INET6, SOCK_STREAM) as sock:
822 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0)
823 return True
824 except error:
825 return False
826
827
Giampaolo Rodola8702b672019-04-09 04:42:06 +0200828def create_server(address, *, family=AF_INET, backlog=None, reuse_port=False,
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200829 dualstack_ipv6=False):
830 """Convenience function which creates a SOCK_STREAM type socket
831 bound to *address* (a 2-tuple (host, port)) and return the socket
832 object.
833
834 *family* should be either AF_INET or AF_INET6.
835 *backlog* is the queue size passed to socket.listen().
836 *reuse_port* dictates whether to use the SO_REUSEPORT socket option.
837 *dualstack_ipv6*: if true and the platform supports it, it will
838 create an AF_INET6 socket able to accept both IPv4 or IPv6
839 connections. When false it will explicitly disable this option on
840 platforms that enable it by default (e.g. Linux).
841
842 >>> with create_server((None, 8000)) as server:
843 ... while True:
844 ... conn, addr = server.accept()
845 ... # handle new connection
846 """
847 if reuse_port and not hasattr(_socket, "SO_REUSEPORT"):
848 raise ValueError("SO_REUSEPORT not supported on this platform")
849 if dualstack_ipv6:
850 if not has_dualstack_ipv6():
851 raise ValueError("dualstack_ipv6 not supported on this platform")
852 if family != AF_INET6:
853 raise ValueError("dualstack_ipv6 requires AF_INET6 family")
854 sock = socket(family, SOCK_STREAM)
855 try:
856 # Note about Windows. We don't set SO_REUSEADDR because:
857 # 1) It's unnecessary: bind() will succeed even in case of a
858 # previous closed socket on the same address and still in
859 # TIME_WAIT state.
860 # 2) If set, another socket is free to bind() on the same
861 # address, effectively preventing this one from accepting
862 # connections. Also, it may set the process in a state where
863 # it'll no longer respond to any signals or graceful kills.
864 # See: msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx
865 if os.name not in ('nt', 'cygwin') and \
866 hasattr(_socket, 'SO_REUSEADDR'):
867 try:
868 sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
869 except error:
870 # Fail later on bind(), for platforms which may not
871 # support this option.
872 pass
873 if reuse_port:
874 sock.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
875 if has_ipv6 and family == AF_INET6:
876 if dualstack_ipv6:
877 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0)
878 elif hasattr(_socket, "IPV6_V6ONLY") and \
879 hasattr(_socket, "IPPROTO_IPV6"):
880 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 1)
881 try:
882 sock.bind(address)
883 except error as err:
884 msg = '%s (while attempting to bind on address %r)' % \
885 (err.strerror, address)
886 raise error(err.errno, msg) from None
Giampaolo Rodola8702b672019-04-09 04:42:06 +0200887 if backlog is None:
888 sock.listen()
889 else:
890 sock.listen(backlog)
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200891 return sock
892 except error:
893 sock.close()
894 raise
895
896
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700897def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
898 """Resolve host and port into list of address info entries.
899
900 Translate the host/port argument into a sequence of 5-tuples that contain
901 all the necessary arguments for creating a socket connected to that service.
902 host is a domain name, a string representation of an IPv4/v6 address or
903 None. port is a string service name such as 'http', a numeric port number or
904 None. By passing None as the value of host and port, you can pass NULL to
905 the underlying C API.
906
907 The family, type and proto arguments can be optionally specified in order to
908 narrow the list of addresses returned. Passing zero as a value for each of
909 these arguments selects the full range of results.
910 """
911 # We override this function since we want to translate the numeric family
912 # and socket type values to enum constants.
913 addrlist = []
914 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
915 af, socktype, proto, canonname, sa = res
916 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700917 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700918 proto, canonname, sa))
919 return addrlist