blob: 5276cc8ba3d6197bb9b8849a1dcf2c944052a4c4 [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
Antoine Pitrou834bd812010-10-13 16:17:14 +0000340 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000341 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000342 return text
343
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200344 if hasattr(os, 'sendfile'):
345
346 def _sendfile_use_sendfile(self, file, offset=0, count=None):
347 self._check_sendfile_params(file, offset, count)
348 sockno = self.fileno()
349 try:
350 fileno = file.fileno()
351 except (AttributeError, io.UnsupportedOperation) as err:
352 raise _GiveupOnSendfile(err) # not a regular file
353 try:
354 fsize = os.fstat(fileno).st_size
Berker Peksagbcfb35f2016-09-17 23:22:06 +0300355 except OSError as err:
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200356 raise _GiveupOnSendfile(err) # not a regular file
357 if not fsize:
358 return 0 # empty file
Giampaolo Rodola94e16502019-10-01 11:40:54 +0800359 # Truncate to 1GiB to avoid OverflowError, see bpo-38319.
360 blocksize = min(count or fsize, 2 ** 30)
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200361 timeout = self.gettimeout()
362 if timeout == 0:
363 raise ValueError("non-blocking sockets are not supported")
364 # poll/select have the advantage of not requiring any
365 # extra file descriptor, contrarily to epoll/kqueue
366 # (also, they require a single syscall).
367 if hasattr(selectors, 'PollSelector'):
368 selector = selectors.PollSelector()
369 else:
370 selector = selectors.SelectSelector()
371 selector.register(sockno, selectors.EVENT_WRITE)
372
373 total_sent = 0
374 # localize variable access to minimize overhead
375 selector_select = selector.select
376 os_sendfile = os.sendfile
377 try:
378 while True:
379 if timeout and not selector_select(timeout):
Christian Heimes03c8ddd2020-11-20 09:26:07 +0100380 raise TimeoutError('timed out')
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200381 if count:
382 blocksize = count - total_sent
383 if blocksize <= 0:
384 break
385 try:
386 sent = os_sendfile(sockno, fileno, offset, blocksize)
387 except BlockingIOError:
388 if not timeout:
389 # Block until the socket is ready to send some
390 # data; avoids hogging CPU resources.
391 selector_select()
392 continue
393 except OSError as err:
394 if total_sent == 0:
395 # We can get here for different reasons, the main
396 # one being 'file' is not a regular mmap(2)-like
397 # file, in which case we'll fall back on using
398 # plain send().
399 raise _GiveupOnSendfile(err)
400 raise err from None
401 else:
402 if sent == 0:
403 break # EOF
404 offset += sent
405 total_sent += sent
406 return total_sent
407 finally:
408 if total_sent > 0 and hasattr(file, 'seek'):
409 file.seek(offset)
410 else:
411 def _sendfile_use_sendfile(self, file, offset=0, count=None):
412 raise _GiveupOnSendfile(
413 "os.sendfile() not available on this platform")
414
415 def _sendfile_use_send(self, file, offset=0, count=None):
416 self._check_sendfile_params(file, offset, count)
417 if self.gettimeout() == 0:
418 raise ValueError("non-blocking sockets are not supported")
419 if offset:
420 file.seek(offset)
421 blocksize = min(count, 8192) if count else 8192
422 total_sent = 0
423 # localize variable access to minimize overhead
424 file_read = file.read
425 sock_send = self.send
426 try:
427 while True:
428 if count:
429 blocksize = min(count - total_sent, blocksize)
430 if blocksize <= 0:
431 break
432 data = memoryview(file_read(blocksize))
433 if not data:
434 break # EOF
435 while True:
436 try:
437 sent = sock_send(data)
438 except BlockingIOError:
439 continue
440 else:
441 total_sent += sent
442 if sent < len(data):
443 data = data[sent:]
444 else:
445 break
446 return total_sent
447 finally:
448 if total_sent > 0 and hasattr(file, 'seek'):
449 file.seek(offset + total_sent)
450
451 def _check_sendfile_params(self, file, offset, count):
452 if 'b' not in getattr(file, 'mode', 'b'):
453 raise ValueError("file should be opened in binary mode")
454 if not self.type & SOCK_STREAM:
455 raise ValueError("only SOCK_STREAM type sockets are supported")
456 if count is not None:
457 if not isinstance(count, int):
458 raise TypeError(
459 "count must be a positive integer (got {!r})".format(count))
460 if count <= 0:
461 raise ValueError(
462 "count must be a positive integer (got {!r})".format(count))
463
464 def sendfile(self, file, offset=0, count=None):
465 """sendfile(file[, offset[, count]]) -> sent
466
467 Send a file until EOF is reached by using high-performance
468 os.sendfile() and return the total number of bytes which
469 were sent.
470 *file* must be a regular file object opened in binary mode.
471 If os.sendfile() is not available (e.g. Windows) or file is
472 not a regular file socket.send() will be used instead.
473 *offset* tells from where to start reading the file.
474 If specified, *count* is the total number of bytes to transmit
475 as opposed to sending the file until EOF is reached.
476 File position is updated on return or also in case of error in
477 which case file.tell() can be used to figure out the number of
478 bytes which were sent.
479 The socket must be of SOCK_STREAM type.
480 Non-blocking sockets are not supported.
481 """
482 try:
483 return self._sendfile_use_sendfile(file, offset, count)
484 except _GiveupOnSendfile:
485 return self._sendfile_use_send(file, offset, count)
486
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000487 def _decref_socketios(self):
488 if self._io_refs > 0:
489 self._io_refs -= 1
490 if self._closed:
491 self.close()
492
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000493 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000494 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000495 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000496
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000497 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000498 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000499 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000500 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000501 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000502
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200503 def detach(self):
504 """detach() -> file descriptor
505
506 Close the socket object without closing the underlying file descriptor.
507 The object cannot be used after this call, but the file descriptor
508 can be reused for other purposes. The file descriptor is returned.
509 """
510 self._closed = True
511 return super().detach()
512
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700513 @property
514 def family(self):
515 """Read-only access to the address family for this socket.
516 """
517 return _intenum_converter(super().family, AddressFamily)
518
519 @property
520 def type(self):
521 """Read-only access to the socket type.
522 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700523 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700524
Victor Stinnerdaf45552013-08-28 00:53:59 +0200525 if os.name == 'nt':
526 def get_inheritable(self):
527 return os.get_handle_inheritable(self.fileno())
528 def set_inheritable(self, inheritable):
529 os.set_handle_inheritable(self.fileno(), inheritable)
530 else:
531 def get_inheritable(self):
532 return os.get_inheritable(self.fileno())
533 def set_inheritable(self, inheritable):
534 os.set_inheritable(self.fileno(), inheritable)
535 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
536 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
537
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000538def fromfd(fd, family, type, proto=0):
539 """ fromfd(fd, family, type[, proto]) -> socket object
540
541 Create a socket object from a duplicate of the given file
542 descriptor. The remaining arguments are the same as for socket().
543 """
544 nfd = dup(fd)
545 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000546
Joannah Nanjekye8d120f72019-09-11 18:12:21 +0100547if hasattr(_socket.socket, "sendmsg"):
548 import array
549
550 def send_fds(sock, buffers, fds, flags=0, address=None):
551 """ send_fds(sock, buffers, fds[, flags[, address]]) -> integer
552
553 Send the list of file descriptors fds over an AF_UNIX socket.
554 """
555 return sock.sendmsg(buffers, [(_socket.SOL_SOCKET,
556 _socket.SCM_RIGHTS, array.array("i", fds))])
557 __all__.append("send_fds")
558
559if hasattr(_socket.socket, "recvmsg"):
560 import array
561
562 def recv_fds(sock, bufsize, maxfds, flags=0):
563 """ recv_fds(sock, bufsize, maxfds[, flags]) -> (data, list of file
564 descriptors, msg_flags, address)
565
566 Receive up to maxfds file descriptors returning the message
567 data and a list containing the descriptors.
568 """
569 # Array of ints
570 fds = array.array("i")
571 msg, ancdata, flags, addr = sock.recvmsg(bufsize,
572 _socket.CMSG_LEN(maxfds * fds.itemsize))
573 for cmsg_level, cmsg_type, cmsg_data in ancdata:
574 if (cmsg_level == _socket.SOL_SOCKET and cmsg_type == _socket.SCM_RIGHTS):
575 fds.frombytes(cmsg_data[:
576 len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
577
578 return msg, list(fds), flags, addr
579 __all__.append("recv_fds")
580
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000581if hasattr(_socket.socket, "share"):
582 def fromshare(info):
583 """ fromshare(info) -> socket object
584
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500585 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000586 socket.share(pid).
587 """
588 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700589 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000590
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000591if hasattr(_socket, "socketpair"):
592
593 def socketpair(family=None, type=SOCK_STREAM, proto=0):
594 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
595
596 Create a pair of socket objects from the sockets returned by the platform
597 socketpair() function.
598 The arguments are the same as for socket() except the default family is
599 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
600 """
601 if family is None:
602 try:
603 family = AF_UNIX
604 except NameError:
605 family = AF_INET
606 a, b = _socket.socketpair(family, type, proto)
607 a = socket(family, type, proto, a.detach())
608 b = socket(family, type, proto, b.detach())
609 return a, b
610
Charles-François Natali98c745a2014-10-14 21:22:44 +0100611else:
612
613 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
614 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
615 if family == AF_INET:
616 host = _LOCALHOST
617 elif family == AF_INET6:
618 host = _LOCALHOST_V6
619 else:
620 raise ValueError("Only AF_INET and AF_INET6 socket address families "
621 "are supported")
622 if type != SOCK_STREAM:
623 raise ValueError("Only SOCK_STREAM socket type is supported")
624 if proto != 0:
625 raise ValueError("Only protocol zero is supported")
626
627 # We create a connected TCP socket. Note the trick with
628 # setblocking(False) that prevents us from having to create a thread.
629 lsock = socket(family, type, proto)
630 try:
631 lsock.bind((host, 0))
632 lsock.listen()
633 # On IPv6, ignore flow_info and scope_id
634 addr, port = lsock.getsockname()[:2]
635 csock = socket(family, type, proto)
636 try:
637 csock.setblocking(False)
638 try:
639 csock.connect((addr, port))
640 except (BlockingIOError, InterruptedError):
641 pass
642 csock.setblocking(True)
643 ssock, _ = lsock.accept()
644 except:
645 csock.close()
646 raise
647 finally:
648 lsock.close()
649 return (ssock, csock)
Victor Stinner3da57432016-08-17 14:40:08 +0200650 __all__.append("socketpair")
Charles-François Natali98c745a2014-10-14 21:22:44 +0100651
652socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
653Create a pair of socket objects from the sockets returned by the platform
654socketpair() function.
655The arguments are the same as for socket() except the default family is AF_UNIX
656if defined on the platform; otherwise, the default is AF_INET.
657"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000658
Antoine Pitrou98b46702010-09-18 22:59:00 +0000659_blocking_errnos = { EAGAIN, EWOULDBLOCK }
660
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000661class SocketIO(io.RawIOBase):
662
663 """Raw I/O implementation for stream sockets.
664
665 This class supports the makefile() method on sockets. It provides
666 the raw I/O interface on top of a socket object.
667 """
668
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000669 # One might wonder why not let FileIO do the job instead. There are two
670 # main reasons why FileIO is not adapted:
671 # - it wouldn't work under Windows (where you can't used read() and
672 # write() on a socket handle)
673 # - it wouldn't work with socket timeouts (FileIO would ignore the
674 # timeout and consider the socket non-blocking)
675
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000676 # XXX More docs
677
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000678 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000679 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000680 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000681 io.RawIOBase.__init__(self)
682 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000683 if "b" not in mode:
684 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000685 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000686 self._reading = "r" in mode
687 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000688 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000689
690 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000691 """Read up to len(b) bytes into the writable buffer *b* and return
692 the number of bytes read. If the socket is non-blocking and no bytes
693 are available, None is returned.
694
695 If *b* is non-empty, a 0 return value indicates that the connection
696 was shutdown at the other end.
697 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000698 self._checkClosed()
699 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000700 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200701 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000702 while True:
703 try:
704 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000705 except timeout:
706 self._timeout_occurred = True
707 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000708 except error as e:
Serhiy Storchakac4d45ee2020-11-22 10:28:34 +0200709 if e.errno in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000710 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000711 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000712
713 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000714 """Write the given bytes or bytearray object *b* to the socket
715 and return the number of bytes written. This can be less than
716 len(b) if not all data could be written. If the socket is
717 non-blocking and no bytes could be written None is returned.
718 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000719 self._checkClosed()
720 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000721 try:
722 return self._sock.send(b)
723 except error as e:
724 # XXX what about EINTR?
Serhiy Storchakac4d45ee2020-11-22 10:28:34 +0200725 if e.errno in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000726 return None
727 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000728
729 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000730 """True if the SocketIO is open for reading.
731 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200732 if self.closed:
733 raise ValueError("I/O operation on closed socket.")
734 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000735
736 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000737 """True if the SocketIO is open for writing.
738 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200739 if self.closed:
740 raise ValueError("I/O operation on closed socket.")
741 return self._writing
742
743 def seekable(self):
744 """True if the SocketIO is open for seeking.
745 """
746 if self.closed:
747 raise ValueError("I/O operation on closed socket.")
748 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000749
750 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000751 """Return the file descriptor of the underlying socket.
752 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000753 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000754 return self._sock.fileno()
755
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000756 @property
757 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000758 if not self.closed:
759 return self.fileno()
760 else:
761 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000762
763 @property
764 def mode(self):
765 return self._mode
766
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000767 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000768 """Close the SocketIO object. This doesn't close the underlying
769 socket, except if all references to it have disappeared.
770 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000771 if self.closed:
772 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000773 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000774 self._sock._decref_socketios()
775 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000776
Fred Drakea6070f02000-08-16 14:14:32 +0000777
778def getfqdn(name=''):
779 """Get fully qualified domain name from name.
780
781 An empty argument is interpreted as meaning the local host.
782
783 First the hostname returned by gethostbyaddr() is checked, then
784 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000785 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000786 """
787 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000788 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000789 name = gethostname()
790 try:
791 hostname, aliases, ipaddrs = gethostbyaddr(name)
792 except error:
793 pass
794 else:
795 aliases.insert(0, hostname)
796 for name in aliases:
797 if '.' in name:
798 break
799 else:
800 name = hostname
801 return name
802
803
Georg Brandlf78e02b2008-06-10 17:40:04 +0000804_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000805
Gregory P. Smithb4066372010-01-03 03:28:29 +0000806def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
807 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000808 """Connect to *address* and return the socket object.
809
810 Convenience function. Connect to *address* (a 2-tuple ``(host,
811 port)``) and return the socket object. Passing the optional
812 *timeout* parameter will set the timeout on the socket instance
813 before attempting to connect. If no *timeout* is supplied, the
814 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000815 is used. If *source_address* is set it must be a tuple of (host, port)
816 for the socket to bind as a source address before making the connection.
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300817 A host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000818 """
819
Guido van Rossumd8faa362007-04-27 19:54:29 +0000820 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000821 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000822 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
823 af, socktype, proto, canonname, sa = res
824 sock = None
825 try:
826 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000827 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000828 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000829 if source_address:
830 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000831 sock.connect(sa)
Victor Stinneracb9fa72017-09-13 10:10:10 -0700832 # Break explicitly a reference cycle
833 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000834 return sock
835
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000836 except error as _:
837 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000838 if sock is not None:
839 sock.close()
840
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000841 if err is not None:
Mario Corcherob64334c2019-12-06 14:27:38 +0000842 try:
843 raise err
844 finally:
845 # Break explicitly a reference cycle
846 err = None
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000847 else:
848 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700849
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200850
851def has_dualstack_ipv6():
852 """Return True if the platform supports creating a SOCK_STREAM socket
853 which can handle both AF_INET and AF_INET6 (IPv4 / IPv6) connections.
854 """
855 if not has_ipv6 \
856 or not hasattr(_socket, 'IPPROTO_IPV6') \
857 or not hasattr(_socket, 'IPV6_V6ONLY'):
858 return False
859 try:
860 with socket(AF_INET6, SOCK_STREAM) as sock:
861 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0)
862 return True
863 except error:
864 return False
865
866
Giampaolo Rodola8702b672019-04-09 04:42:06 +0200867def create_server(address, *, family=AF_INET, backlog=None, reuse_port=False,
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200868 dualstack_ipv6=False):
869 """Convenience function which creates a SOCK_STREAM type socket
870 bound to *address* (a 2-tuple (host, port)) and return the socket
871 object.
872
873 *family* should be either AF_INET or AF_INET6.
874 *backlog* is the queue size passed to socket.listen().
875 *reuse_port* dictates whether to use the SO_REUSEPORT socket option.
876 *dualstack_ipv6*: if true and the platform supports it, it will
877 create an AF_INET6 socket able to accept both IPv4 or IPv6
878 connections. When false it will explicitly disable this option on
879 platforms that enable it by default (e.g. Linux).
880
Karthikeyan Singaravelan43682f12020-01-11 10:46:30 +0530881 >>> with create_server(('', 8000)) as server:
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200882 ... while True:
883 ... conn, addr = server.accept()
884 ... # handle new connection
885 """
886 if reuse_port and not hasattr(_socket, "SO_REUSEPORT"):
887 raise ValueError("SO_REUSEPORT not supported on this platform")
888 if dualstack_ipv6:
889 if not has_dualstack_ipv6():
890 raise ValueError("dualstack_ipv6 not supported on this platform")
891 if family != AF_INET6:
892 raise ValueError("dualstack_ipv6 requires AF_INET6 family")
893 sock = socket(family, SOCK_STREAM)
894 try:
895 # Note about Windows. We don't set SO_REUSEADDR because:
896 # 1) It's unnecessary: bind() will succeed even in case of a
897 # previous closed socket on the same address and still in
898 # TIME_WAIT state.
899 # 2) If set, another socket is free to bind() on the same
900 # address, effectively preventing this one from accepting
901 # connections. Also, it may set the process in a state where
902 # it'll no longer respond to any signals or graceful kills.
903 # See: msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx
904 if os.name not in ('nt', 'cygwin') and \
905 hasattr(_socket, 'SO_REUSEADDR'):
906 try:
907 sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
908 except error:
909 # Fail later on bind(), for platforms which may not
910 # support this option.
911 pass
912 if reuse_port:
913 sock.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
914 if has_ipv6 and family == AF_INET6:
915 if dualstack_ipv6:
916 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 0)
917 elif hasattr(_socket, "IPV6_V6ONLY") and \
918 hasattr(_socket, "IPPROTO_IPV6"):
919 sock.setsockopt(IPPROTO_IPV6, IPV6_V6ONLY, 1)
920 try:
921 sock.bind(address)
922 except error as err:
923 msg = '%s (while attempting to bind on address %r)' % \
924 (err.strerror, address)
925 raise error(err.errno, msg) from None
Giampaolo Rodola8702b672019-04-09 04:42:06 +0200926 if backlog is None:
927 sock.listen()
928 else:
929 sock.listen(backlog)
Giampaolo Rodolaeb7e29f2019-04-09 00:34:02 +0200930 return sock
931 except error:
932 sock.close()
933 raise
934
935
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700936def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
937 """Resolve host and port into list of address info entries.
938
939 Translate the host/port argument into a sequence of 5-tuples that contain
940 all the necessary arguments for creating a socket connected to that service.
941 host is a domain name, a string representation of an IPv4/v6 address or
942 None. port is a string service name such as 'http', a numeric port number or
943 None. By passing None as the value of host and port, you can pass NULL to
944 the underlying C API.
945
946 The family, type and proto arguments can be optionally specified in order to
947 narrow the list of addresses returned. Passing zero as a value for each of
948 these arguments selects the full range of results.
949 """
950 # We override this function since we want to translate the numeric family
951 # and socket type values to enum constants.
952 addrlist = []
953 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
954 af, socktype, proto, canonname, sa = res
955 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700956 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700957 proto, canonname, sa))
958 return addrlist