blob: fc11eb783c3dd104d1ceaecc7d04c3cb301b7b83 [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 [*]
Joannah Nanjekye8d120f72019-09-11 18:12:21 +010015send_fds() -- Send file descriptor to the socket.
16recv_fds() -- Recieve file descriptors from the socket.
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +000017fromshare() -- create a socket object from data received from socket.share() [*]
Fred Drakea6070f02000-08-16 14:14:32 +000018gethostname() -- return the current hostname
19gethostbyname() -- map a hostname to its IP number
20gethostbyaddr() -- map an IP number or hostname to DNS info
21getservbyname() -- map a service name and a protocol name to a port number
Mark Dickinson5c91bf32009-06-02 07:41:26 +000022getprotobyname() -- map a protocol name (e.g. 'tcp') to a number
Fred Drakea6070f02000-08-16 14:14:32 +000023ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order
24htons(), htonl() -- convert 16, 32 bit int from host to network byte order
25inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format
26inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +000027socket.getdefaulttimeout() -- get the default timeout value
28socket.setdefaulttimeout() -- set the default timeout value
Gregory P. Smithb4066372010-01-03 03:28:29 +000029create_connection() -- connects to an address, with an optional timeout and
30 optional source address.
Fred Drakea6070f02000-08-16 14:14:32 +000031
32 [*] not available on all platforms!
33
34Special objects:
35
36SocketType -- type object for socket objects
37error -- exception raised for I/O errors
Guido van Rossum47dfa4a2003-04-25 05:48:32 +000038has_ipv6 -- boolean value indicating if IPv6 is supported
Fred Drakea6070f02000-08-16 14:14:32 +000039
Ethan Furman7184bac2014-10-14 18:56:53 -070040IntEnum constants:
Fred Drakea6070f02000-08-16 14:14:32 +000041
42AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
43SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)
44
Ethan Furman7184bac2014-10-14 18:56:53 -070045Integer constants:
46
Fred Drakea6070f02000-08-16 14:14:32 +000047Many other constants may be defined; these may be used in calls to
48the setsockopt() and getsockopt() methods.
49"""
50
Tim Peters18e67782002-02-17 04:25:24 +000051import _socket
Fred Drakea6070f02000-08-16 14:14:32 +000052from _socket import *
Tim Peters18e67782002-02-17 04:25:24 +000053
Giampaolo Rodola'915d1412014-06-11 03:54:30 +020054import os, sys, io, selectors
Ethan Furman40bed8a2016-09-11 13:34:42 -070055from enum import IntEnum, IntFlag
Fred Drakea6070f02000-08-16 14:14:32 +000056
Fred Drake70d566b2003-04-29 19:50:25 +000057try:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000058 import errno
Brett Cannoncd171c82013-07-04 17:43:24 -040059except ImportError:
Gregory P. Smithaafdca82010-01-04 04:50:36 +000060 errno = None
61EBADF = getattr(errno, 'EBADF', 9)
Antoine Pitrou98b46702010-09-18 22:59:00 +000062EAGAIN = getattr(errno, 'EAGAIN', 11)
63EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
Fred Drake70d566b2003-04-29 19:50:25 +000064
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +020065__all__ = ["fromfd", "getfqdn", "create_connection", "create_server",
66 "has_dualstack_ipv6", "AddressFamily", "SocketKind"]
Skip Montanaro0de65802001-02-15 22:15:14 +000067__all__.extend(os._get_exports_list(_socket))
Thomas Wouters47b49bf2007-08-30 22:15:33 +000068
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070069# Set up the socket.AF_* socket.SOCK_* constants as members of IntEnums for
70# nicer string representations.
71# Note that _socket only knows about the integer values. The public interface
72# in this module understands the enums and translates them back from integers
73# where needed (e.g. .family property of a socket object).
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070074
orlnub1230fb9fad2018-09-12 20:28:53 +030075IntEnum._convert_(
Ethan Furman24e837f2015-03-18 17:27:57 -070076 'AddressFamily',
77 __name__,
78 lambda C: C.isupper() and C.startswith('AF_'))
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070079
orlnub1230fb9fad2018-09-12 20:28:53 +030080IntEnum._convert_(
Ethan Furman24e837f2015-03-18 17:27:57 -070081 'SocketKind',
82 __name__,
83 lambda C: C.isupper() and C.startswith('SOCK_'))
Charles-François Natali98c745a2014-10-14 21:22:44 +010084
orlnub1230fb9fad2018-09-12 20:28:53 +030085IntFlag._convert_(
Ethan Furman40bed8a2016-09-11 13:34:42 -070086 'MsgFlag',
87 __name__,
88 lambda C: C.isupper() and C.startswith('MSG_'))
89
orlnub1230fb9fad2018-09-12 20:28:53 +030090IntFlag._convert_(
Ethan Furman40bed8a2016-09-11 13:34:42 -070091 'AddressInfo',
92 __name__,
93 lambda C: C.isupper() and C.startswith('AI_'))
94
Charles-François Natali98c745a2014-10-14 21:22:44 +010095_LOCALHOST = '127.0.0.1'
96_LOCALHOST_V6 = '::1'
97
98
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070099def _intenum_converter(value, enum_klass):
100 """Convert a numeric family value to an IntEnum member.
101
102 If it's not a known member, return the numeric value itself.
103 """
104 try:
105 return enum_klass(value)
106 except ValueError:
107 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000108
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700109
Fred Drakea6070f02000-08-16 14:14:32 +0000110# WSA error codes
111if sys.platform.lower().startswith("win"):
112 errorTab = {}
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700113 errorTab[6] = "Specified event object handle is invalid."
114 errorTab[8] = "Insufficient memory available."
115 errorTab[87] = "One or more parameters are invalid."
116 errorTab[995] = "Overlapped operation aborted."
117 errorTab[996] = "Overlapped I/O event object not in signaled state."
118 errorTab[997] = "Overlapped operation will complete later."
Fred Drakea6070f02000-08-16 14:14:32 +0000119 errorTab[10004] = "The operation was interrupted."
120 errorTab[10009] = "A bad file handle was passed."
121 errorTab[10013] = "Permission denied."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700122 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
Fred Drakea6070f02000-08-16 14:14:32 +0000123 errorTab[10022] = "An invalid operation was attempted."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700124 errorTab[10024] = "Too many open files."
Fred Drakea6070f02000-08-16 14:14:32 +0000125 errorTab[10035] = "The socket operation would block"
126 errorTab[10036] = "A blocking operation is already in progress."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700127 errorTab[10037] = "Operation already in progress."
128 errorTab[10038] = "Socket operation on nonsocket."
129 errorTab[10039] = "Destination address required."
130 errorTab[10040] = "Message too long."
131 errorTab[10041] = "Protocol wrong type for socket."
132 errorTab[10042] = "Bad protocol option."
133 errorTab[10043] = "Protocol not supported."
134 errorTab[10044] = "Socket type not supported."
135 errorTab[10045] = "Operation not supported."
136 errorTab[10046] = "Protocol family not supported."
137 errorTab[10047] = "Address family not supported by protocol family."
Fred Drakea6070f02000-08-16 14:14:32 +0000138 errorTab[10048] = "The network address is in use."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700139 errorTab[10049] = "Cannot assign requested address."
140 errorTab[10050] = "Network is down."
141 errorTab[10051] = "Network is unreachable."
142 errorTab[10052] = "Network dropped connection on reset."
143 errorTab[10053] = "Software caused connection abort."
Fred Drakea6070f02000-08-16 14:14:32 +0000144 errorTab[10054] = "The connection has been reset."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700145 errorTab[10055] = "No buffer space available."
146 errorTab[10056] = "Socket is already connected."
147 errorTab[10057] = "Socket is not connected."
Fred Drakea6070f02000-08-16 14:14:32 +0000148 errorTab[10058] = "The network has been shut down."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700149 errorTab[10059] = "Too many references."
Fred Drakea6070f02000-08-16 14:14:32 +0000150 errorTab[10060] = "The operation timed out."
151 errorTab[10061] = "Connection refused."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700152 errorTab[10062] = "Cannot translate name."
Fred Drakea6070f02000-08-16 14:14:32 +0000153 errorTab[10063] = "The name is too long."
154 errorTab[10064] = "The host is down."
155 errorTab[10065] = "The host is unreachable."
Ngalim Siregar71ea6882019-09-09 16:15:14 +0700156 errorTab[10066] = "Directory not empty."
157 errorTab[10067] = "Too many processes."
158 errorTab[10068] = "User quota exceeded."
159 errorTab[10069] = "Disk quota exceeded."
160 errorTab[10070] = "Stale file handle reference."
161 errorTab[10071] = "Item is remote."
162 errorTab[10091] = "Network subsystem is unavailable."
163 errorTab[10092] = "Winsock.dll version out of range."
164 errorTab[10093] = "Successful WSAStartup not yet performed."
165 errorTab[10101] = "Graceful shutdown in progress."
166 errorTab[10102] = "No more results from WSALookupServiceNext."
167 errorTab[10103] = "Call has been canceled."
168 errorTab[10104] = "Procedure call table is invalid."
169 errorTab[10105] = "Service provider is invalid."
170 errorTab[10106] = "Service provider failed to initialize."
171 errorTab[10107] = "System call failure."
172 errorTab[10108] = "Service not found."
173 errorTab[10109] = "Class type not found."
174 errorTab[10110] = "No more results from WSALookupServiceNext."
175 errorTab[10111] = "Call was canceled."
176 errorTab[10112] = "Database query was refused."
177 errorTab[11001] = "Host not found."
178 errorTab[11002] = "Nonauthoritative host not found."
179 errorTab[11003] = "This is a nonrecoverable error."
180 errorTab[11004] = "Valid name, no data record requested type."
181 errorTab[11005] = "QoS receivers."
182 errorTab[11006] = "QoS senders."
183 errorTab[11007] = "No QoS senders."
184 errorTab[11008] = "QoS no receivers."
185 errorTab[11009] = "QoS request confirmed."
186 errorTab[11010] = "QoS admission error."
187 errorTab[11011] = "QoS policy failure."
188 errorTab[11012] = "QoS bad style."
189 errorTab[11013] = "QoS bad object."
190 errorTab[11014] = "QoS traffic control error."
191 errorTab[11015] = "QoS generic error."
192 errorTab[11016] = "QoS service type error."
193 errorTab[11017] = "QoS flowspec error."
194 errorTab[11018] = "Invalid QoS provider buffer."
195 errorTab[11019] = "Invalid QoS filter style."
196 errorTab[11020] = "Invalid QoS filter style."
197 errorTab[11021] = "Incorrect QoS filter count."
198 errorTab[11022] = "Invalid QoS object length."
199 errorTab[11023] = "Incorrect QoS flow count."
200 errorTab[11024] = "Unrecognized QoS object."
201 errorTab[11025] = "Invalid QoS policy object."
202 errorTab[11026] = "Invalid QoS flow descriptor."
203 errorTab[11027] = "Invalid QoS provider-specific flowspec."
204 errorTab[11028] = "Invalid QoS provider-specific filterspec."
205 errorTab[11029] = "Invalid QoS shape discard mode object."
206 errorTab[11030] = "Invalid QoS shaping rate object."
207 errorTab[11031] = "Reserved policy QoS element type."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000208 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000209
Fred Drakea6070f02000-08-16 14:14:32 +0000210
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200211class _GiveupOnSendfile(Exception): pass
212
213
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000214class socket(_socket.socket):
215
216 """A subclass of _socket.socket adding the makefile() method."""
217
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000218 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000219
Christian Heimesb6e43af2018-01-29 22:37:58 +0100220 def __init__(self, family=-1, type=-1, proto=-1, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700221 # For user code address family and type values are IntEnum members, but
222 # for the underlying _socket.socket they're just integers. The
223 # constructor of _socket.socket converts the given argument to an
224 # integer automatically.
Christian Heimesb6e43af2018-01-29 22:37:58 +0100225 if fileno is None:
226 if family == -1:
227 family = AF_INET
228 if type == -1:
229 type = SOCK_STREAM
230 if proto == -1:
231 proto = 0
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000232 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000233 self._io_refs = 0
234 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000235
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000236 def __enter__(self):
237 return self
238
239 def __exit__(self, *args):
240 if not self._closed:
241 self.close()
242
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000243 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200244 """Wrap __repr__() to reveal the real class name and socket
245 address(es).
246 """
247 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200248 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200249 % (self.__class__.__module__,
Serhiy Storchaka521e5862014-07-22 15:00:37 +0300250 self.__class__.__qualname__,
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200251 " [closed]" if closed else "",
252 self.fileno(),
253 self.family,
254 self.type,
255 self.proto)
256 if not closed:
257 try:
258 laddr = self.getsockname()
259 if laddr:
260 s += ", laddr=%s" % str(laddr)
261 except error:
262 pass
263 try:
264 raddr = self.getpeername()
265 if raddr:
266 s += ", raddr=%s" % str(raddr)
267 except error:
268 pass
269 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000270 return s
271
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100272 def __getstate__(self):
Serhiy Storchaka0353b4e2018-10-31 02:28:07 +0200273 raise TypeError(f"cannot pickle {self.__class__.__name__!r} object")
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100274
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000275 def dup(self):
276 """dup() -> socket object
277
Victor Stinnerdaf45552013-08-28 00:53:59 +0200278 Duplicate the socket. Return a new socket object connected to the same
279 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000280 """
281 fd = dup(self.fileno())
282 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
283 sock.settimeout(self.gettimeout())
284 return sock
285
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000286 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000287 """accept() -> (socket object, address info)
288
289 Wait for an incoming connection. Return a new socket
290 representing the connection, and the address of the client.
291 For IP sockets, the address info is a pair (hostaddr, port).
292 """
293 fd, addr = self._accept()
Yury Selivanov98181422017-12-18 20:02:54 -0500294 sock = socket(self.family, self.type, self.proto, fileno=fd)
Antoine Pitrou600232b2011-01-05 21:03:42 +0000295 # Issue #7995: if no default timeout is set and the listening
296 # socket had a (non-zero) timeout, force the new socket in blocking
297 # mode to override platform-specific socket flags inheritance.
298 if getdefaulttimeout() is None and self.gettimeout():
299 sock.setblocking(True)
300 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000301
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000302 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000303 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000304 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000305
Berker Peksag3fe64d02016-02-18 17:34:00 +0200306 The arguments are as for io.open() after the filename, except the only
307 supported mode values are 'r' (default), 'w' and 'b'.
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000308 """
Berker Peksag3fe64d02016-02-18 17:34:00 +0200309 # XXX refactor to share code?
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200310 if not set(mode) <= {"r", "w", "b"}:
311 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000312 writing = "w" in mode
313 reading = "r" in mode or not writing
314 assert reading or writing
315 binary = "b" in mode
316 rawmode = ""
317 if reading:
318 rawmode += "r"
319 if writing:
320 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000321 raw = SocketIO(self, rawmode)
322 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000323 if buffering is None:
324 buffering = -1
325 if buffering < 0:
326 buffering = io.DEFAULT_BUFFER_SIZE
327 if buffering == 0:
328 if not binary:
329 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000330 return raw
331 if reading and writing:
332 buffer = io.BufferedRWPair(raw, raw, buffering)
333 elif reading:
334 buffer = io.BufferedReader(raw, buffering)
335 else:
336 assert writing
337 buffer = io.BufferedWriter(raw, buffering)
338 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000339 return buffer
Inada Naokicfe523b2021-04-27 13:16:28 +0900340 encoding = io.text_encoding(encoding)
Antoine Pitrou834bd812010-10-13 16:17:14 +0000341 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000342 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000343 return text
344
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200345 if hasattr(os, 'sendfile'):
346
347 def _sendfile_use_sendfile(self, file, offset=0, count=None):
348 self._check_sendfile_params(file, offset, count)
349 sockno = self.fileno()
350 try:
351 fileno = file.fileno()
352 except (AttributeError, io.UnsupportedOperation) as err:
353 raise _GiveupOnSendfile(err) # not a regular file
354 try:
355 fsize = os.fstat(fileno).st_size
Berker Peksagbcfb35f2016-09-17 23:22:06 +0300356 except OSError as err:
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200357 raise _GiveupOnSendfile(err) # not a regular file
358 if not fsize:
359 return 0 # empty file
Giampaolo Rodola94e16502019-10-01 11:40:54 +0800360 # Truncate to 1GiB to avoid OverflowError, see bpo-38319.
361 blocksize = min(count or fsize, 2 ** 30)
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200362 timeout = self.gettimeout()
363 if timeout == 0:
364 raise ValueError("non-blocking sockets are not supported")
365 # poll/select have the advantage of not requiring any
366 # extra file descriptor, contrarily to epoll/kqueue
367 # (also, they require a single syscall).
368 if hasattr(selectors, 'PollSelector'):
369 selector = selectors.PollSelector()
370 else:
371 selector = selectors.SelectSelector()
372 selector.register(sockno, selectors.EVENT_WRITE)
373
374 total_sent = 0
375 # localize variable access to minimize overhead
376 selector_select = selector.select
377 os_sendfile = os.sendfile
378 try:
379 while True:
380 if timeout and not selector_select(timeout):
Christian Heimes03c8ddd2020-11-20 09:26:07 +0100381 raise TimeoutError('timed out')
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200382 if count:
383 blocksize = count - total_sent
384 if blocksize <= 0:
385 break
386 try:
387 sent = os_sendfile(sockno, fileno, offset, blocksize)
388 except BlockingIOError:
389 if not timeout:
390 # Block until the socket is ready to send some
391 # data; avoids hogging CPU resources.
392 selector_select()
393 continue
394 except OSError as err:
395 if total_sent == 0:
396 # We can get here for different reasons, the main
397 # one being 'file' is not a regular mmap(2)-like
398 # file, in which case we'll fall back on using
399 # plain send().
400 raise _GiveupOnSendfile(err)
401 raise err from None
402 else:
403 if sent == 0:
404 break # EOF
405 offset += sent
406 total_sent += sent
407 return total_sent
408 finally:
409 if total_sent > 0 and hasattr(file, 'seek'):
410 file.seek(offset)
411 else:
412 def _sendfile_use_sendfile(self, file, offset=0, count=None):
413 raise _GiveupOnSendfile(
414 "os.sendfile() not available on this platform")
415
416 def _sendfile_use_send(self, file, offset=0, count=None):
417 self._check_sendfile_params(file, offset, count)
418 if self.gettimeout() == 0:
419 raise ValueError("non-blocking sockets are not supported")
420 if offset:
421 file.seek(offset)
422 blocksize = min(count, 8192) if count else 8192
423 total_sent = 0
424 # localize variable access to minimize overhead
425 file_read = file.read
426 sock_send = self.send
427 try:
428 while True:
429 if count:
430 blocksize = min(count - total_sent, blocksize)
431 if blocksize <= 0:
432 break
433 data = memoryview(file_read(blocksize))
434 if not data:
435 break # EOF
436 while True:
437 try:
438 sent = sock_send(data)
439 except BlockingIOError:
440 continue
441 else:
442 total_sent += sent
443 if sent < len(data):
444 data = data[sent:]
445 else:
446 break
447 return total_sent
448 finally:
449 if total_sent > 0 and hasattr(file, 'seek'):
450 file.seek(offset + total_sent)
451
452 def _check_sendfile_params(self, file, offset, count):
453 if 'b' not in getattr(file, 'mode', 'b'):
454 raise ValueError("file should be opened in binary mode")
455 if not self.type & SOCK_STREAM:
456 raise ValueError("only SOCK_STREAM type sockets are supported")
457 if count is not None:
458 if not isinstance(count, int):
459 raise TypeError(
460 "count must be a positive integer (got {!r})".format(count))
461 if count <= 0:
462 raise ValueError(
463 "count must be a positive integer (got {!r})".format(count))
464
465 def sendfile(self, file, offset=0, count=None):
466 """sendfile(file[, offset[, count]]) -> sent
467
468 Send a file until EOF is reached by using high-performance
469 os.sendfile() and return the total number of bytes which
470 were sent.
471 *file* must be a regular file object opened in binary mode.
472 If os.sendfile() is not available (e.g. Windows) or file is
473 not a regular file socket.send() will be used instead.
474 *offset* tells from where to start reading the file.
475 If specified, *count* is the total number of bytes to transmit
476 as opposed to sending the file until EOF is reached.
477 File position is updated on return or also in case of error in
478 which case file.tell() can be used to figure out the number of
479 bytes which were sent.
480 The socket must be of SOCK_STREAM type.
481 Non-blocking sockets are not supported.
482 """
483 try:
484 return self._sendfile_use_sendfile(file, offset, count)
485 except _GiveupOnSendfile:
486 return self._sendfile_use_send(file, offset, count)
487
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000488 def _decref_socketios(self):
489 if self._io_refs > 0:
490 self._io_refs -= 1
491 if self._closed:
492 self.close()
493
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000494 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000495 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000496 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000497
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000498 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000499 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000500 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000501 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000502 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000503
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200504 def detach(self):
505 """detach() -> file descriptor
506
507 Close the socket object without closing the underlying file descriptor.
508 The object cannot be used after this call, but the file descriptor
509 can be reused for other purposes. The file descriptor is returned.
510 """
511 self._closed = True
512 return super().detach()
513
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700514 @property
515 def family(self):
516 """Read-only access to the address family for this socket.
517 """
518 return _intenum_converter(super().family, AddressFamily)
519
520 @property
521 def type(self):
522 """Read-only access to the socket type.
523 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700524 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700525
Victor Stinnerdaf45552013-08-28 00:53:59 +0200526 if os.name == 'nt':
527 def get_inheritable(self):
528 return os.get_handle_inheritable(self.fileno())
529 def set_inheritable(self, inheritable):
530 os.set_handle_inheritable(self.fileno(), inheritable)
531 else:
532 def get_inheritable(self):
533 return os.get_inheritable(self.fileno())
534 def set_inheritable(self, inheritable):
535 os.set_inheritable(self.fileno(), inheritable)
536 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
537 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
538
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000539def fromfd(fd, family, type, proto=0):
540 """ fromfd(fd, family, type[, proto]) -> socket object
541
542 Create a socket object from a duplicate of the given file
543 descriptor. The remaining arguments are the same as for socket().
544 """
545 nfd = dup(fd)
546 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000547
Joannah Nanjekye8d120f72019-09-11 18:12:21 +0100548if hasattr(_socket.socket, "sendmsg"):
549 import array
550
551 def send_fds(sock, buffers, fds, flags=0, address=None):
552 """ send_fds(sock, buffers, fds[, flags[, address]]) -> integer
553
554 Send the list of file descriptors fds over an AF_UNIX socket.
555 """
556 return sock.sendmsg(buffers, [(_socket.SOL_SOCKET,
557 _socket.SCM_RIGHTS, array.array("i", fds))])
558 __all__.append("send_fds")
559
560if hasattr(_socket.socket, "recvmsg"):
561 import array
562
563 def recv_fds(sock, bufsize, maxfds, flags=0):
564 """ recv_fds(sock, bufsize, maxfds[, flags]) -> (data, list of file
565 descriptors, msg_flags, address)
566
567 Receive up to maxfds file descriptors returning the message
568 data and a list containing the descriptors.
569 """
570 # Array of ints
571 fds = array.array("i")
572 msg, ancdata, flags, addr = sock.recvmsg(bufsize,
573 _socket.CMSG_LEN(maxfds * fds.itemsize))
574 for cmsg_level, cmsg_type, cmsg_data in ancdata:
575 if (cmsg_level == _socket.SOL_SOCKET and cmsg_type == _socket.SCM_RIGHTS):
576 fds.frombytes(cmsg_data[:
577 len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
578
579 return msg, list(fds), flags, addr
580 __all__.append("recv_fds")
581
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000582if hasattr(_socket.socket, "share"):
583 def fromshare(info):
584 """ fromshare(info) -> socket object
585
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500586 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000587 socket.share(pid).
588 """
589 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700590 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000591
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000592if hasattr(_socket, "socketpair"):
593
594 def socketpair(family=None, type=SOCK_STREAM, proto=0):
595 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
596
597 Create a pair of socket objects from the sockets returned by the platform
598 socketpair() function.
599 The arguments are the same as for socket() except the default family is
600 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
601 """
602 if family is None:
603 try:
604 family = AF_UNIX
605 except NameError:
606 family = AF_INET
607 a, b = _socket.socketpair(family, type, proto)
608 a = socket(family, type, proto, a.detach())
609 b = socket(family, type, proto, b.detach())
610 return a, b
611
Charles-François Natali98c745a2014-10-14 21:22:44 +0100612else:
613
614 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
615 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
616 if family == AF_INET:
617 host = _LOCALHOST
618 elif family == AF_INET6:
619 host = _LOCALHOST_V6
620 else:
621 raise ValueError("Only AF_INET and AF_INET6 socket address families "
622 "are supported")
623 if type != SOCK_STREAM:
624 raise ValueError("Only SOCK_STREAM socket type is supported")
625 if proto != 0:
626 raise ValueError("Only protocol zero is supported")
627
628 # We create a connected TCP socket. Note the trick with
629 # setblocking(False) that prevents us from having to create a thread.
630 lsock = socket(family, type, proto)
631 try:
632 lsock.bind((host, 0))
633 lsock.listen()
634 # On IPv6, ignore flow_info and scope_id
635 addr, port = lsock.getsockname()[:2]
636 csock = socket(family, type, proto)
637 try:
638 csock.setblocking(False)
639 try:
640 csock.connect((addr, port))
641 except (BlockingIOError, InterruptedError):
642 pass
643 csock.setblocking(True)
644 ssock, _ = lsock.accept()
645 except:
646 csock.close()
647 raise
648 finally:
649 lsock.close()
650 return (ssock, csock)
Victor Stinner3da57432016-08-17 14:40:08 +0200651 __all__.append("socketpair")
Charles-François Natali98c745a2014-10-14 21:22:44 +0100652
653socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
654Create a pair of socket objects from the sockets returned by the platform
655socketpair() function.
656The arguments are the same as for socket() except the default family is AF_UNIX
657if defined on the platform; otherwise, the default is AF_INET.
658"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000659
Antoine Pitrou98b46702010-09-18 22:59:00 +0000660_blocking_errnos = { EAGAIN, EWOULDBLOCK }
661
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000662class SocketIO(io.RawIOBase):
663
664 """Raw I/O implementation for stream sockets.
665
666 This class supports the makefile() method on sockets. It provides
667 the raw I/O interface on top of a socket object.
668 """
669
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000670 # One might wonder why not let FileIO do the job instead. There are two
671 # main reasons why FileIO is not adapted:
672 # - it wouldn't work under Windows (where you can't used read() and
673 # write() on a socket handle)
674 # - it wouldn't work with socket timeouts (FileIO would ignore the
675 # timeout and consider the socket non-blocking)
676
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000677 # XXX More docs
678
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000679 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000680 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000681 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000682 io.RawIOBase.__init__(self)
683 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000684 if "b" not in mode:
685 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000686 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000687 self._reading = "r" in mode
688 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000689 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000690
691 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000692 """Read up to len(b) bytes into the writable buffer *b* and return
693 the number of bytes read. If the socket is non-blocking and no bytes
694 are available, None is returned.
695
696 If *b* is non-empty, a 0 return value indicates that the connection
697 was shutdown at the other end.
698 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000699 self._checkClosed()
700 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000701 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200702 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000703 while True:
704 try:
705 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000706 except timeout:
707 self._timeout_occurred = True
708 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000709 except error as e:
Serhiy Storchakac4d45ee2020-11-22 10:28:34 +0200710 if e.errno in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000711 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000712 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000713
714 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000715 """Write the given bytes or bytearray object *b* to the socket
716 and return the number of bytes written. This can be less than
717 len(b) if not all data could be written. If the socket is
718 non-blocking and no bytes could be written None is returned.
719 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000720 self._checkClosed()
721 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000722 try:
723 return self._sock.send(b)
724 except error as e:
725 # XXX what about EINTR?
Serhiy Storchakac4d45ee2020-11-22 10:28:34 +0200726 if e.errno in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000727 return None
728 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000729
730 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000731 """True if the SocketIO is open for reading.
732 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200733 if self.closed:
734 raise ValueError("I/O operation on closed socket.")
735 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000736
737 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000738 """True if the SocketIO is open for writing.
739 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200740 if self.closed:
741 raise ValueError("I/O operation on closed socket.")
742 return self._writing
743
744 def seekable(self):
745 """True if the SocketIO is open for seeking.
746 """
747 if self.closed:
748 raise ValueError("I/O operation on closed socket.")
749 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000750
751 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000752 """Return the file descriptor of the underlying socket.
753 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000754 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000755 return self._sock.fileno()
756
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000757 @property
758 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000759 if not self.closed:
760 return self.fileno()
761 else:
762 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000763
764 @property
765 def mode(self):
766 return self._mode
767
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000768 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000769 """Close the SocketIO object. This doesn't close the underlying
770 socket, except if all references to it have disappeared.
771 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000772 if self.closed:
773 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000774 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000775 self._sock._decref_socketios()
776 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000777
Fred Drakea6070f02000-08-16 14:14:32 +0000778
779def getfqdn(name=''):
780 """Get fully qualified domain name from name.
781
782 An empty argument is interpreted as meaning the local host.
783
784 First the hostname returned by gethostbyaddr() is checked, then
785 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000786 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000787 """
788 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000789 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000790 name = gethostname()
791 try:
792 hostname, aliases, ipaddrs = gethostbyaddr(name)
793 except error:
794 pass
795 else:
796 aliases.insert(0, hostname)
797 for name in aliases:
798 if '.' in name:
799 break
800 else:
801 name = hostname
802 return name
803
804
Georg Brandlf78e02b2008-06-10 17:40:04 +0000805_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000806
Gregory P. Smithb4066372010-01-03 03:28:29 +0000807def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
808 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000809 """Connect to *address* and return the socket object.
810
811 Convenience function. Connect to *address* (a 2-tuple ``(host,
812 port)``) and return the socket object. Passing the optional
813 *timeout* parameter will set the timeout on the socket instance
814 before attempting to connect. If no *timeout* is supplied, the
815 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000816 is used. If *source_address* is set it must be a tuple of (host, port)
817 for the socket to bind as a source address before making the connection.
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300818 A host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000819 """
820
Guido van Rossumd8faa362007-04-27 19:54:29 +0000821 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000822 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000823 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
824 af, socktype, proto, canonname, sa = res
825 sock = None
826 try:
827 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000828 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000829 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000830 if source_address:
831 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000832 sock.connect(sa)
Victor Stinneracb9fa72017-09-13 10:10:10 -0700833 # Break explicitly a reference cycle
834 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000835 return sock
836
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000837 except error as _:
838 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000839 if sock is not None:
840 sock.close()
841
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000842 if err is not None:
Mario Corcherob64334c2019-12-06 14:27:38 +0000843 try:
844 raise err
845 finally:
846 # Break explicitly a reference cycle
847 err = None
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000848 else:
849 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700850
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200851
852def has_dualstack_ipv6():
853 """Return True if the platform supports creating a SOCK_STREAM socket
854 which can handle both AF_INET and AF_INET6 (IPv4 / IPv6) connections.
855 """
856 if not has_ipv6 \
857 or not hasattr(_socket, 'IPPROTO_IPV6') \
858 or not hasattr(_socket, 'IPV6_V6ONLY'):
859 return False
860 try:
861 with socket(AF_INET6, SOCK_STREAM) as sock:
862 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0)
863 return True
864 except error:
865 return False
866
867
Giampaolo Rodola8702b672019-04-09 04:42:06 +0200868def create_server(address, *, family=AF_INET, backlog=None, reuse_port=False,
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200869 dualstack_ipv6=False):
870 """Convenience function which creates a SOCK_STREAM type socket
871 bound to *address* (a 2-tuple (host, port)) and return the socket
872 object.
873
874 *family* should be either AF_INET or AF_INET6.
875 *backlog* is the queue size passed to socket.listen().
876 *reuse_port* dictates whether to use the SO_REUSEPORT socket option.
877 *dualstack_ipv6*: if true and the platform supports it, it will
878 create an AF_INET6 socket able to accept both IPv4 or IPv6
879 connections. When false it will explicitly disable this option on
880 platforms that enable it by default (e.g. Linux).
881
Karthikeyan Singaravelan43682f12020-01-11 10:46:30 +0530882 >>> with create_server(('', 8000)) as server:
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200883 ... while True:
884 ... conn, addr = server.accept()
885 ... # handle new connection
886 """
887 if reuse_port and not hasattr(_socket, "SO_REUSEPORT"):
888 raise ValueError("SO_REUSEPORT not supported on this platform")
889 if dualstack_ipv6:
890 if not has_dualstack_ipv6():
891 raise ValueError("dualstack_ipv6 not supported on this platform")
892 if family != AF_INET6:
893 raise ValueError("dualstack_ipv6 requires AF_INET6 family")
894 sock = socket(family, SOCK_STREAM)
895 try:
896 # Note about Windows. We don't set SO_REUSEADDR because:
897 # 1) It's unnecessary: bind() will succeed even in case of a
898 # previous closed socket on the same address and still in
899 # TIME_WAIT state.
900 # 2) If set, another socket is free to bind() on the same
901 # address, effectively preventing this one from accepting
902 # connections. Also, it may set the process in a state where
903 # it'll no longer respond to any signals or graceful kills.
904 # See: msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx
905 if os.name not in ('nt', 'cygwin') and \
906 hasattr(_socket, 'SO_REUSEADDR'):
907 try:
908 sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
909 except error:
910 # Fail later on bind(), for platforms which may not
911 # support this option.
912 pass
913 if reuse_port:
914 sock.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
915 if has_ipv6 and family == AF_INET6:
916 if dualstack_ipv6:
917 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0)
918 elif hasattr(_socket, "IPV6_V6ONLY") and \
919 hasattr(_socket, "IPPROTO_IPV6"):
920 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 1)
921 try:
922 sock.bind(address)
923 except error as err:
924 msg = '%s (while attempting to bind on address %r)' % \
925 (err.strerror, address)
926 raise error(err.errno, msg) from None
Giampaolo Rodola8702b672019-04-09 04:42:06 +0200927 if backlog is None:
928 sock.listen()
929 else:
930 sock.listen(backlog)
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200931 return sock
932 except error:
933 sock.close()
934 raise
935
936
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700937def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
938 """Resolve host and port into list of address info entries.
939
940 Translate the host/port argument into a sequence of 5-tuples that contain
941 all the necessary arguments for creating a socket connected to that service.
942 host is a domain name, a string representation of an IPv4/v6 address or
943 None. port is a string service name such as 'http', a numeric port number or
944 None. By passing None as the value of host and port, you can pass NULL to
945 the underlying C API.
946
947 The family, type and proto arguments can be optionally specified in order to
948 narrow the list of addresses returned. Passing zero as a value for each of
949 these arguments selects the full range of results.
950 """
951 # We override this function since we want to translate the numeric family
952 # and socket type values to enum constants.
953 addrlist = []
954 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
955 af, socktype, proto, canonname, sa = res
956 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700957 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700958 proto, canonname, sa))
959 return addrlist