blob: 87b097f2c0712dfff5e1364faeb665e58b75257e [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
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700107
Fred Drakea6070f02000-08-16 14:14:32 +0000108# WSA error codes
109if sys.platform.lower().startswith("win"):
110 errorTab = {}
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700111 errorTab[6] = "Specified event object handle is invalid."
112 errorTab[8] = "Insufficient memory available."
113 errorTab[87] = "One or more parameters are invalid."
114 errorTab[995] = "Overlapped operation aborted."
115 errorTab[996] = "Overlapped I/O event object not in signaled state."
116 errorTab[997] = "Overlapped operation will complete later."
Fred Drakea6070f02000-08-16 14:14:32 +0000117 errorTab[10004] = "The operation was interrupted."
118 errorTab[10009] = "A bad file handle was passed."
119 errorTab[10013] = "Permission denied."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700120 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
Fred Drakea6070f02000-08-16 14:14:32 +0000121 errorTab[10022] = "An invalid operation was attempted."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700122 errorTab[10024] = "Too many open files."
Fred Drakea6070f02000-08-16 14:14:32 +0000123 errorTab[10035] = "The socket operation would block"
124 errorTab[10036] = "A blocking operation is already in progress."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700125 errorTab[10037] = "Operation already in progress."
126 errorTab[10038] = "Socket operation on nonsocket."
127 errorTab[10039] = "Destination address required."
128 errorTab[10040] = "Message too long."
129 errorTab[10041] = "Protocol wrong type for socket."
130 errorTab[10042] = "Bad protocol option."
131 errorTab[10043] = "Protocol not supported."
132 errorTab[10044] = "Socket type not supported."
133 errorTab[10045] = "Operation not supported."
134 errorTab[10046] = "Protocol family not supported."
135 errorTab[10047] = "Address family not supported by protocol family."
Fred Drakea6070f02000-08-16 14:14:32 +0000136 errorTab[10048] = "The network address is in use."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700137 errorTab[10049] = "Cannot assign requested address."
138 errorTab[10050] = "Network is down."
139 errorTab[10051] = "Network is unreachable."
140 errorTab[10052] = "Network dropped connection on reset."
141 errorTab[10053] = "Software caused connection abort."
Fred Drakea6070f02000-08-16 14:14:32 +0000142 errorTab[10054] = "The connection has been reset."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700143 errorTab[10055] = "No buffer space available."
144 errorTab[10056] = "Socket is already connected."
145 errorTab[10057] = "Socket is not connected."
Fred Drakea6070f02000-08-16 14:14:32 +0000146 errorTab[10058] = "The network has been shut down."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700147 errorTab[10059] = "Too many references."
Fred Drakea6070f02000-08-16 14:14:32 +0000148 errorTab[10060] = "The operation timed out."
149 errorTab[10061] = "Connection refused."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700150 errorTab[10062] = "Cannot translate name."
Fred Drakea6070f02000-08-16 14:14:32 +0000151 errorTab[10063] = "The name is too long."
152 errorTab[10064] = "The host is down."
153 errorTab[10065] = "The host is unreachable."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700154 errorTab[10066] = "Directory not empty."
155 errorTab[10067] = "Too many processes."
156 errorTab[10068] = "User quota exceeded."
157 errorTab[10069] = "Disk quota exceeded."
158 errorTab[10070] = "Stale file handle reference."
159 errorTab[10071] = "Item is remote."
160 errorTab[10091] = "Network subsystem is unavailable."
161 errorTab[10092] = "Winsock.dll version out of range."
162 errorTab[10093] = "Successful WSAStartup not yet performed."
163 errorTab[10101] = "Graceful shutdown in progress."
164 errorTab[10102] = "No more results from WSALookupServiceNext."
165 errorTab[10103] = "Call has been canceled."
166 errorTab[10104] = "Procedure call table is invalid."
167 errorTab[10105] = "Service provider is invalid."
168 errorTab[10106] = "Service provider failed to initialize."
169 errorTab[10107] = "System call failure."
170 errorTab[10108] = "Service not found."
171 errorTab[10109] = "Class type not found."
172 errorTab[10110] = "No more results from WSALookupServiceNext."
173 errorTab[10111] = "Call was canceled."
174 errorTab[10112] = "Database query was refused."
175 errorTab[11001] = "Host not found."
176 errorTab[11002] = "Nonauthoritative host not found."
177 errorTab[11003] = "This is a nonrecoverable error."
178 errorTab[11004] = "Valid name, no data record requested type."
179 errorTab[11005] = "QoS receivers."
180 errorTab[11006] = "QoS senders."
181 errorTab[11007] = "No QoS senders."
182 errorTab[11008] = "QoS no receivers."
183 errorTab[11009] = "QoS request confirmed."
184 errorTab[11010] = "QoS admission error."
185 errorTab[11011] = "QoS policy failure."
186 errorTab[11012] = "QoS bad style."
187 errorTab[11013] = "QoS bad object."
188 errorTab[11014] = "QoS traffic control error."
189 errorTab[11015] = "QoS generic error."
190 errorTab[11016] = "QoS service type error."
191 errorTab[11017] = "QoS flowspec error."
192 errorTab[11018] = "Invalid QoS provider buffer."
193 errorTab[11019] = "Invalid QoS filter style."
194 errorTab[11020] = "Invalid QoS filter style."
195 errorTab[11021] = "Incorrect QoS filter count."
196 errorTab[11022] = "Invalid QoS object length."
197 errorTab[11023] = "Incorrect QoS flow count."
198 errorTab[11024] = "Unrecognized QoS object."
199 errorTab[11025] = "Invalid QoS policy object."
200 errorTab[11026] = "Invalid QoS flow descriptor."
201 errorTab[11027] = "Invalid QoS provider-specific flowspec."
202 errorTab[11028] = "Invalid QoS provider-specific filterspec."
203 errorTab[11029] = "Invalid QoS shape discard mode object."
204 errorTab[11030] = "Invalid QoS shaping rate object."
205 errorTab[11031] = "Reserved policy QoS element type."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000206 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000207
Fred Drakea6070f02000-08-16 14:14:32 +0000208
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200209class _GiveupOnSendfile(Exception): pass
210
211
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000212class socket(_socket.socket):
213
214 """A subclass of _socket.socket adding the makefile() method."""
215
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000216 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000217
Christian Heimesb6e43af2018-01-29 22:37:58 +0100218 def __init__(self, family=-1, type=-1, proto=-1, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700219 # For user code address family and type values are IntEnum members, but
220 # for the underlying _socket.socket they're just integers. The
221 # constructor of _socket.socket converts the given argument to an
222 # integer automatically.
Christian Heimesb6e43af2018-01-29 22:37:58 +0100223 if fileno is None:
224 if family == -1:
225 family = AF_INET
226 if type == -1:
227 type = SOCK_STREAM
228 if proto == -1:
229 proto = 0
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000230 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000231 self._io_refs = 0
232 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000233
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000234 def __enter__(self):
235 return self
236
237 def __exit__(self, *args):
238 if not self._closed:
239 self.close()
240
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000241 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200242 """Wrap __repr__() to reveal the real class name and socket
243 address(es).
244 """
245 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200246 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200247 % (self.__class__.__module__,
Serhiy Storchaka521e5862014-07-22 15:00:37 +0300248 self.__class__.__qualname__,
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200249 " [closed]" if closed else "",
250 self.fileno(),
251 self.family,
252 self.type,
253 self.proto)
254 if not closed:
255 try:
256 laddr = self.getsockname()
257 if laddr:
258 s += ", laddr=%s" % str(laddr)
259 except error:
260 pass
261 try:
262 raddr = self.getpeername()
263 if raddr:
264 s += ", raddr=%s" % str(raddr)
265 except error:
266 pass
267 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000268 return s
269
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100270 def __getstate__(self):
Serhiy Storchaka0353b4e2018-10-31 02:28:07 +0200271 raise TypeError(f"cannot pickle {self.__class__.__name__!r} object")
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100272
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000273 def dup(self):
274 """dup() -> socket object
275
Victor Stinnerdaf45552013-08-28 00:53:59 +0200276 Duplicate the socket. Return a new socket object connected to the same
277 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000278 """
279 fd = dup(self.fileno())
280 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
281 sock.settimeout(self.gettimeout())
282 return sock
283
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000284 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000285 """accept() -> (socket object, address info)
286
287 Wait for an incoming connection. Return a new socket
288 representing the connection, and the address of the client.
289 For IP sockets, the address info is a pair (hostaddr, port).
290 """
291 fd, addr = self._accept()
Yury Selivanov98181422017-12-18 20:02:54 -0500292 sock = socket(self.family, self.type, self.proto, fileno=fd)
Antoine Pitrou600232b2011-01-05 21:03:42 +0000293 # Issue #7995: if no default timeout is set and the listening
294 # socket had a (non-zero) timeout, force the new socket in blocking
295 # mode to override platform-specific socket flags inheritance.
296 if getdefaulttimeout() is None and self.gettimeout():
297 sock.setblocking(True)
298 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000299
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000300 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000301 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000302 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000303
Berker Peksag3fe64d02016-02-18 17:34:00 +0200304 The arguments are as for io.open() after the filename, except the only
305 supported mode values are 'r' (default), 'w' and 'b'.
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000306 """
Berker Peksag3fe64d02016-02-18 17:34:00 +0200307 # XXX refactor to share code?
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200308 if not set(mode) <= {"r", "w", "b"}:
309 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000310 writing = "w" in mode
311 reading = "r" in mode or not writing
312 assert reading or writing
313 binary = "b" in mode
314 rawmode = ""
315 if reading:
316 rawmode += "r"
317 if writing:
318 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000319 raw = SocketIO(self, rawmode)
320 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000321 if buffering is None:
322 buffering = -1
323 if buffering < 0:
324 buffering = io.DEFAULT_BUFFER_SIZE
325 if buffering == 0:
326 if not binary:
327 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000328 return raw
329 if reading and writing:
330 buffer = io.BufferedRWPair(raw, raw, buffering)
331 elif reading:
332 buffer = io.BufferedReader(raw, buffering)
333 else:
334 assert writing
335 buffer = io.BufferedWriter(raw, buffering)
336 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000337 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000338 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000339 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000340 return text
341
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200342 if hasattr(os, 'sendfile'):
343
344 def _sendfile_use_sendfile(self, file, offset=0, count=None):
345 self._check_sendfile_params(file, offset, count)
346 sockno = self.fileno()
347 try:
348 fileno = file.fileno()
349 except (AttributeError, io.UnsupportedOperation) as err:
350 raise _GiveupOnSendfile(err) # not a regular file
351 try:
352 fsize = os.fstat(fileno).st_size
Berker Peksagbcfb35f2016-09-17 23:22:06 +0300353 except OSError as err:
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200354 raise _GiveupOnSendfile(err) # not a regular file
355 if not fsize:
356 return 0 # empty file
357 blocksize = fsize if not count else count
358
359 timeout = self.gettimeout()
360 if timeout == 0:
361 raise ValueError("non-blocking sockets are not supported")
362 # poll/select have the advantage of not requiring any
363 # extra file descriptor, contrarily to epoll/kqueue
364 # (also, they require a single syscall).
365 if hasattr(selectors, 'PollSelector'):
366 selector = selectors.PollSelector()
367 else:
368 selector = selectors.SelectSelector()
369 selector.register(sockno, selectors.EVENT_WRITE)
370
371 total_sent = 0
372 # localize variable access to minimize overhead
373 selector_select = selector.select
374 os_sendfile = os.sendfile
375 try:
376 while True:
377 if timeout and not selector_select(timeout):
378 raise _socket.timeout('timed out')
379 if count:
380 blocksize = count - total_sent
381 if blocksize <= 0:
382 break
383 try:
384 sent = os_sendfile(sockno, fileno, offset, blocksize)
385 except BlockingIOError:
386 if not timeout:
387 # Block until the socket is ready to send some
388 # data; avoids hogging CPU resources.
389 selector_select()
390 continue
391 except OSError as err:
392 if total_sent == 0:
393 # We can get here for different reasons, the main
394 # one being 'file' is not a regular mmap(2)-like
395 # file, in which case we'll fall back on using
396 # plain send().
397 raise _GiveupOnSendfile(err)
398 raise err from None
399 else:
400 if sent == 0:
401 break # EOF
402 offset += sent
403 total_sent += sent
404 return total_sent
405 finally:
406 if total_sent > 0 and hasattr(file, 'seek'):
407 file.seek(offset)
408 else:
409 def _sendfile_use_sendfile(self, file, offset=0, count=None):
410 raise _GiveupOnSendfile(
411 "os.sendfile() not available on this platform")
412
413 def _sendfile_use_send(self, file, offset=0, count=None):
414 self._check_sendfile_params(file, offset, count)
415 if self.gettimeout() == 0:
416 raise ValueError("non-blocking sockets are not supported")
417 if offset:
418 file.seek(offset)
419 blocksize = min(count, 8192) if count else 8192
420 total_sent = 0
421 # localize variable access to minimize overhead
422 file_read = file.read
423 sock_send = self.send
424 try:
425 while True:
426 if count:
427 blocksize = min(count - total_sent, blocksize)
428 if blocksize <= 0:
429 break
430 data = memoryview(file_read(blocksize))
431 if not data:
432 break # EOF
433 while True:
434 try:
435 sent = sock_send(data)
436 except BlockingIOError:
437 continue
438 else:
439 total_sent += sent
440 if sent < len(data):
441 data = data[sent:]
442 else:
443 break
444 return total_sent
445 finally:
446 if total_sent > 0 and hasattr(file, 'seek'):
447 file.seek(offset + total_sent)
448
449 def _check_sendfile_params(self, file, offset, count):
450 if 'b' not in getattr(file, 'mode', 'b'):
451 raise ValueError("file should be opened in binary mode")
452 if not self.type & SOCK_STREAM:
453 raise ValueError("only SOCK_STREAM type sockets are supported")
454 if count is not None:
455 if not isinstance(count, int):
456 raise TypeError(
457 "count must be a positive integer (got {!r})".format(count))
458 if count <= 0:
459 raise ValueError(
460 "count must be a positive integer (got {!r})".format(count))
461
462 def sendfile(self, file, offset=0, count=None):
463 """sendfile(file[, offset[, count]]) -> sent
464
465 Send a file until EOF is reached by using high-performance
466 os.sendfile() and return the total number of bytes which
467 were sent.
468 *file* must be a regular file object opened in binary mode.
469 If os.sendfile() is not available (e.g. Windows) or file is
470 not a regular file socket.send() will be used instead.
471 *offset* tells from where to start reading the file.
472 If specified, *count* is the total number of bytes to transmit
473 as opposed to sending the file until EOF is reached.
474 File position is updated on return or also in case of error in
475 which case file.tell() can be used to figure out the number of
476 bytes which were sent.
477 The socket must be of SOCK_STREAM type.
478 Non-blocking sockets are not supported.
479 """
480 try:
481 return self._sendfile_use_sendfile(file, offset, count)
482 except _GiveupOnSendfile:
483 return self._sendfile_use_send(file, offset, count)
484
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000485 def _decref_socketios(self):
486 if self._io_refs > 0:
487 self._io_refs -= 1
488 if self._closed:
489 self.close()
490
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000491 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000492 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000493 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000494
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000495 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000496 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000497 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000498 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000499 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000500
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200501 def detach(self):
502 """detach() -> file descriptor
503
504 Close the socket object without closing the underlying file descriptor.
505 The object cannot be used after this call, but the file descriptor
506 can be reused for other purposes. The file descriptor is returned.
507 """
508 self._closed = True
509 return super().detach()
510
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700511 @property
512 def family(self):
513 """Read-only access to the address family for this socket.
514 """
515 return _intenum_converter(super().family, AddressFamily)
516
517 @property
518 def type(self):
519 """Read-only access to the socket type.
520 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700521 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700522
Victor Stinnerdaf45552013-08-28 00:53:59 +0200523 if os.name == 'nt':
524 def get_inheritable(self):
525 return os.get_handle_inheritable(self.fileno())
526 def set_inheritable(self, inheritable):
527 os.set_handle_inheritable(self.fileno(), inheritable)
528 else:
529 def get_inheritable(self):
530 return os.get_inheritable(self.fileno())
531 def set_inheritable(self, inheritable):
532 os.set_inheritable(self.fileno(), inheritable)
533 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
534 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
535
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000536def fromfd(fd, family, type, proto=0):
537 """ fromfd(fd, family, type[, proto]) -> socket object
538
539 Create a socket object from a duplicate of the given file
540 descriptor. The remaining arguments are the same as for socket().
541 """
542 nfd = dup(fd)
543 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000544
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000545if hasattr(_socket.socket, "share"):
546 def fromshare(info):
547 """ fromshare(info) -> socket object
548
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500549 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000550 socket.share(pid).
551 """
552 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700553 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000554
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000555if hasattr(_socket, "socketpair"):
556
557 def socketpair(family=None, type=SOCK_STREAM, proto=0):
558 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
559
560 Create a pair of socket objects from the sockets returned by the platform
561 socketpair() function.
562 The arguments are the same as for socket() except the default family is
563 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
564 """
565 if family is None:
566 try:
567 family = AF_UNIX
568 except NameError:
569 family = AF_INET
570 a, b = _socket.socketpair(family, type, proto)
571 a = socket(family, type, proto, a.detach())
572 b = socket(family, type, proto, b.detach())
573 return a, b
574
Charles-François Natali98c745a2014-10-14 21:22:44 +0100575else:
576
577 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
578 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
579 if family == AF_INET:
580 host = _LOCALHOST
581 elif family == AF_INET6:
582 host = _LOCALHOST_V6
583 else:
584 raise ValueError("Only AF_INET and AF_INET6 socket address families "
585 "are supported")
586 if type != SOCK_STREAM:
587 raise ValueError("Only SOCK_STREAM socket type is supported")
588 if proto != 0:
589 raise ValueError("Only protocol zero is supported")
590
591 # We create a connected TCP socket. Note the trick with
592 # setblocking(False) that prevents us from having to create a thread.
593 lsock = socket(family, type, proto)
594 try:
595 lsock.bind((host, 0))
596 lsock.listen()
597 # On IPv6, ignore flow_info and scope_id
598 addr, port = lsock.getsockname()[:2]
599 csock = socket(family, type, proto)
600 try:
601 csock.setblocking(False)
602 try:
603 csock.connect((addr, port))
604 except (BlockingIOError, InterruptedError):
605 pass
606 csock.setblocking(True)
607 ssock, _ = lsock.accept()
608 except:
609 csock.close()
610 raise
611 finally:
612 lsock.close()
613 return (ssock, csock)
Victor Stinner3da57432016-08-17 14:40:08 +0200614 __all__.append("socketpair")
Charles-François Natali98c745a2014-10-14 21:22:44 +0100615
616socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
617Create a pair of socket objects from the sockets returned by the platform
618socketpair() function.
619The arguments are the same as for socket() except the default family is AF_UNIX
620if defined on the platform; otherwise, the default is AF_INET.
621"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000622
Antoine Pitrou98b46702010-09-18 22:59:00 +0000623_blocking_errnos = { EAGAIN, EWOULDBLOCK }
624
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000625class SocketIO(io.RawIOBase):
626
627 """Raw I/O implementation for stream sockets.
628
629 This class supports the makefile() method on sockets. It provides
630 the raw I/O interface on top of a socket object.
631 """
632
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000633 # One might wonder why not let FileIO do the job instead. There are two
634 # main reasons why FileIO is not adapted:
635 # - it wouldn't work under Windows (where you can't used read() and
636 # write() on a socket handle)
637 # - it wouldn't work with socket timeouts (FileIO would ignore the
638 # timeout and consider the socket non-blocking)
639
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000640 # XXX More docs
641
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000642 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000643 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000644 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000645 io.RawIOBase.__init__(self)
646 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000647 if "b" not in mode:
648 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000649 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000650 self._reading = "r" in mode
651 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000652 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000653
654 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000655 """Read up to len(b) bytes into the writable buffer *b* and return
656 the number of bytes read. If the socket is non-blocking and no bytes
657 are available, None is returned.
658
659 If *b* is non-empty, a 0 return value indicates that the connection
660 was shutdown at the other end.
661 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000662 self._checkClosed()
663 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000664 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200665 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000666 while True:
667 try:
668 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000669 except timeout:
670 self._timeout_occurred = True
671 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000672 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200673 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000674 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000675 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000676
677 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000678 """Write the given bytes or bytearray object *b* to the socket
679 and return the number of bytes written. This can be less than
680 len(b) if not all data could be written. If the socket is
681 non-blocking and no bytes could be written None is returned.
682 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000683 self._checkClosed()
684 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000685 try:
686 return self._sock.send(b)
687 except error as e:
688 # XXX what about EINTR?
689 if e.args[0] in _blocking_errnos:
690 return None
691 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000692
693 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000694 """True if the SocketIO is open for reading.
695 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200696 if self.closed:
697 raise ValueError("I/O operation on closed socket.")
698 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000699
700 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000701 """True if the SocketIO is open for writing.
702 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200703 if self.closed:
704 raise ValueError("I/O operation on closed socket.")
705 return self._writing
706
707 def seekable(self):
708 """True if the SocketIO is open for seeking.
709 """
710 if self.closed:
711 raise ValueError("I/O operation on closed socket.")
712 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000713
714 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000715 """Return the file descriptor of the underlying socket.
716 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000717 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000718 return self._sock.fileno()
719
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000720 @property
721 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000722 if not self.closed:
723 return self.fileno()
724 else:
725 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000726
727 @property
728 def mode(self):
729 return self._mode
730
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000731 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000732 """Close the SocketIO object. This doesn't close the underlying
733 socket, except if all references to it have disappeared.
734 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000735 if self.closed:
736 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000737 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000738 self._sock._decref_socketios()
739 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000740
Fred Drakea6070f02000-08-16 14:14:32 +0000741
742def getfqdn(name=''):
743 """Get fully qualified domain name from name.
744
745 An empty argument is interpreted as meaning the local host.
746
747 First the hostname returned by gethostbyaddr() is checked, then
748 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000749 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000750 """
751 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000752 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000753 name = gethostname()
754 try:
755 hostname, aliases, ipaddrs = gethostbyaddr(name)
756 except error:
757 pass
758 else:
759 aliases.insert(0, hostname)
760 for name in aliases:
761 if '.' in name:
762 break
763 else:
764 name = hostname
765 return name
766
767
Georg Brandlf78e02b2008-06-10 17:40:04 +0000768_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000769
Gregory P. Smithb4066372010-01-03 03:28:29 +0000770def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
771 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000772 """Connect to *address* and return the socket object.
773
774 Convenience function. Connect to *address* (a 2-tuple ``(host,
775 port)``) and return the socket object. Passing the optional
776 *timeout* parameter will set the timeout on the socket instance
777 before attempting to connect. If no *timeout* is supplied, the
778 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000779 is used. If *source_address* is set it must be a tuple of (host, port)
780 for the socket to bind as a source address before making the connection.
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300781 A host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000782 """
783
Guido van Rossumd8faa362007-04-27 19:54:29 +0000784 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000785 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000786 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
787 af, socktype, proto, canonname, sa = res
788 sock = None
789 try:
790 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000791 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000792 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000793 if source_address:
794 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000795 sock.connect(sa)
Victor Stinneracb9fa72017-09-13 10:10:10 -0700796 # Break explicitly a reference cycle
797 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000798 return sock
799
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000800 except error as _:
801 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000802 if sock is not None:
803 sock.close()
804
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000805 if err is not None:
806 raise err
807 else:
808 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700809
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200810
811def has_dualstack_ipv6():
812 """Return True if the platform supports creating a SOCK_STREAM socket
813 which can handle both AF_INET and AF_INET6 (IPv4 / IPv6) connections.
814 """
815 if not has_ipv6 \
816 or not hasattr(_socket, 'IPPROTO_IPV6') \
817 or not hasattr(_socket, 'IPV6_V6ONLY'):
818 return False
819 try:
820 with socket(AF_INET6, SOCK_STREAM) as sock:
821 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0)
822 return True
823 except error:
824 return False
825
826
Giampaolo Rodola8702b672019-04-09 04:42:06 +0200827def create_server(address, *, family=AF_INET, backlog=None, reuse_port=False,
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200828 dualstack_ipv6=False):
829 """Convenience function which creates a SOCK_STREAM type socket
830 bound to *address* (a 2-tuple (host, port)) and return the socket
831 object.
832
833 *family* should be either AF_INET or AF_INET6.
834 *backlog* is the queue size passed to socket.listen().
835 *reuse_port* dictates whether to use the SO_REUSEPORT socket option.
836 *dualstack_ipv6*: if true and the platform supports it, it will
837 create an AF_INET6 socket able to accept both IPv4 or IPv6
838 connections. When false it will explicitly disable this option on
839 platforms that enable it by default (e.g. Linux).
840
841 >>> with create_server((None, 8000)) as server:
842 ... while True:
843 ... conn, addr = server.accept()
844 ... # handle new connection
845 """
846 if reuse_port and not hasattr(_socket, "SO_REUSEPORT"):
847 raise ValueError("SO_REUSEPORT not supported on this platform")
848 if dualstack_ipv6:
849 if not has_dualstack_ipv6():
850 raise ValueError("dualstack_ipv6 not supported on this platform")
851 if family != AF_INET6:
852 raise ValueError("dualstack_ipv6 requires AF_INET6 family")
853 sock = socket(family, SOCK_STREAM)
854 try:
855 # Note about Windows. We don't set SO_REUSEADDR because:
856 # 1) It's unnecessary: bind() will succeed even in case of a
857 # previous closed socket on the same address and still in
858 # TIME_WAIT state.
859 # 2) If set, another socket is free to bind() on the same
860 # address, effectively preventing this one from accepting
861 # connections. Also, it may set the process in a state where
862 # it'll no longer respond to any signals or graceful kills.
863 # See: msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx
864 if os.name not in ('nt', 'cygwin') and \
865 hasattr(_socket, 'SO_REUSEADDR'):
866 try:
867 sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
868 except error:
869 # Fail later on bind(), for platforms which may not
870 # support this option.
871 pass
872 if reuse_port:
873 sock.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
874 if has_ipv6 and family == AF_INET6:
875 if dualstack_ipv6:
876 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0)
877 elif hasattr(_socket, "IPV6_V6ONLY") and \
878 hasattr(_socket, "IPPROTO_IPV6"):
879 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 1)
880 try:
881 sock.bind(address)
882 except error as err:
883 msg = '%s (while attempting to bind on address %r)' % \
884 (err.strerror, address)
885 raise error(err.errno, msg) from None
Giampaolo Rodola8702b672019-04-09 04:42:06 +0200886 if backlog is None:
887 sock.listen()
888 else:
889 sock.listen(backlog)
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200890 return sock
891 except error:
892 sock.close()
893 raise
894
895
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700896def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
897 """Resolve host and port into list of address info entries.
898
899 Translate the host/port argument into a sequence of 5-tuples that contain
900 all the necessary arguments for creating a socket connected to that service.
901 host is a domain name, a string representation of an IPv4/v6 address or
902 None. port is a string service name such as 'http', a numeric port number or
903 None. By passing None as the value of host and port, you can pass NULL to
904 the underlying C API.
905
906 The family, type and proto arguments can be optionally specified in order to
907 narrow the list of addresses returned. Passing zero as a value for each of
908 these arguments selects the full range of results.
909 """
910 # We override this function since we want to translate the numeric family
911 # and socket type values to enum constants.
912 addrlist = []
913 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
914 af, socktype, proto, canonname, sa = res
915 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700916 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700917 proto, canonname, sa))
918 return addrlist