blob: 2d8aee3e904736959faa9a29fa663795326a5bbe [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
Ethan Furman8e120ac2014-10-18 15:10:49 -070063__all__ = ["fromfd", "getfqdn", "create_connection",
64 "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
Ethan Furman24e837f2015-03-18 17:27:57 -070073IntEnum._convert(
74 'AddressFamily',
75 __name__,
76 lambda C: C.isupper() and C.startswith('AF_'))
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070077
Ethan Furman24e837f2015-03-18 17:27:57 -070078IntEnum._convert(
79 'SocketKind',
80 __name__,
81 lambda C: C.isupper() and C.startswith('SOCK_'))
Charles-François Natali98c745a2014-10-14 21:22:44 +010082
Ethan Furman40bed8a2016-09-11 13:34:42 -070083IntFlag._convert(
84 'MsgFlag',
85 __name__,
86 lambda C: C.isupper() and C.startswith('MSG_'))
87
88IntFlag._convert(
89 'AddressInfo',
90 __name__,
91 lambda C: C.isupper() and C.startswith('AI_'))
92
Charles-François Natali98c745a2014-10-14 21:22:44 +010093_LOCALHOST = '127.0.0.1'
94_LOCALHOST_V6 = '::1'
95
96
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070097def _intenum_converter(value, enum_klass):
98 """Convert a numeric family value to an IntEnum member.
99
100 If it's not a known member, return the numeric value itself.
101 """
102 try:
103 return enum_klass(value)
104 except ValueError:
105 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000106
107_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +0000108
Fred Drakea6070f02000-08-16 14:14:32 +0000109# WSA error codes
110if sys.platform.lower().startswith("win"):
111 errorTab = {}
112 errorTab[10004] = "The operation was interrupted."
113 errorTab[10009] = "A bad file handle was passed."
114 errorTab[10013] = "Permission denied."
115 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
116 errorTab[10022] = "An invalid operation was attempted."
117 errorTab[10035] = "The socket operation would block"
118 errorTab[10036] = "A blocking operation is already in progress."
119 errorTab[10048] = "The network address is in use."
120 errorTab[10054] = "The connection has been reset."
121 errorTab[10058] = "The network has been shut down."
122 errorTab[10060] = "The operation timed out."
123 errorTab[10061] = "Connection refused."
124 errorTab[10063] = "The name is too long."
125 errorTab[10064] = "The host is down."
126 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000127 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000128
Fred Drakea6070f02000-08-16 14:14:32 +0000129
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200130class _GiveupOnSendfile(Exception): pass
131
132
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000133class socket(_socket.socket):
134
135 """A subclass of _socket.socket adding the makefile() method."""
136
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000137 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000138
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000139 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700140 # For user code address family and type values are IntEnum members, but
141 # for the underlying _socket.socket they're just integers. The
142 # constructor of _socket.socket converts the given argument to an
143 # integer automatically.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000144 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000145 self._io_refs = 0
146 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000147
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000148 def __enter__(self):
149 return self
150
151 def __exit__(self, *args):
152 if not self._closed:
153 self.close()
154
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000155 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200156 """Wrap __repr__() to reveal the real class name and socket
157 address(es).
158 """
159 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200160 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200161 % (self.__class__.__module__,
Serhiy Storchaka521e5862014-07-22 15:00:37 +0300162 self.__class__.__qualname__,
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200163 " [closed]" if closed else "",
164 self.fileno(),
165 self.family,
166 self.type,
167 self.proto)
168 if not closed:
169 try:
170 laddr = self.getsockname()
171 if laddr:
172 s += ", laddr=%s" % str(laddr)
173 except error:
174 pass
175 try:
176 raddr = self.getpeername()
177 if raddr:
178 s += ", raddr=%s" % str(raddr)
179 except error:
180 pass
181 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000182 return s
183
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100184 def __getstate__(self):
185 raise TypeError("Cannot serialize socket object")
186
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000187 def dup(self):
188 """dup() -> socket object
189
Victor Stinnerdaf45552013-08-28 00:53:59 +0200190 Duplicate the socket. Return a new socket object connected to the same
191 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000192 """
193 fd = dup(self.fileno())
194 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
195 sock.settimeout(self.gettimeout())
196 return sock
197
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000198 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000199 """accept() -> (socket object, address info)
200
201 Wait for an incoming connection. Return a new socket
202 representing the connection, and the address of the client.
203 For IP sockets, the address info is a pair (hostaddr, port).
204 """
205 fd, addr = self._accept()
Yury Selivanov98181422017-12-18 20:02:54 -0500206 sock = socket(self.family, self.type, self.proto, fileno=fd)
Antoine Pitrou600232b2011-01-05 21:03:42 +0000207 # Issue #7995: if no default timeout is set and the listening
208 # socket had a (non-zero) timeout, force the new socket in blocking
209 # mode to override platform-specific socket flags inheritance.
210 if getdefaulttimeout() is None and self.gettimeout():
211 sock.setblocking(True)
212 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000213
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000214 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000215 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000216 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000217
Berker Peksag3fe64d02016-02-18 17:34:00 +0200218 The arguments are as for io.open() after the filename, except the only
219 supported mode values are 'r' (default), 'w' and 'b'.
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000220 """
Berker Peksag3fe64d02016-02-18 17:34:00 +0200221 # XXX refactor to share code?
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200222 if not set(mode) <= {"r", "w", "b"}:
223 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000224 writing = "w" in mode
225 reading = "r" in mode or not writing
226 assert reading or writing
227 binary = "b" in mode
228 rawmode = ""
229 if reading:
230 rawmode += "r"
231 if writing:
232 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000233 raw = SocketIO(self, rawmode)
234 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000235 if buffering is None:
236 buffering = -1
237 if buffering < 0:
238 buffering = io.DEFAULT_BUFFER_SIZE
239 if buffering == 0:
240 if not binary:
241 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000242 return raw
243 if reading and writing:
244 buffer = io.BufferedRWPair(raw, raw, buffering)
245 elif reading:
246 buffer = io.BufferedReader(raw, buffering)
247 else:
248 assert writing
249 buffer = io.BufferedWriter(raw, buffering)
250 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000251 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000252 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000253 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000254 return text
255
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200256 if hasattr(os, 'sendfile'):
257
258 def _sendfile_use_sendfile(self, file, offset=0, count=None):
259 self._check_sendfile_params(file, offset, count)
260 sockno = self.fileno()
261 try:
262 fileno = file.fileno()
263 except (AttributeError, io.UnsupportedOperation) as err:
264 raise _GiveupOnSendfile(err) # not a regular file
265 try:
266 fsize = os.fstat(fileno).st_size
Berker Peksagbcfb35f2016-09-17 23:22:06 +0300267 except OSError as err:
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200268 raise _GiveupOnSendfile(err) # not a regular file
269 if not fsize:
270 return 0 # empty file
271 blocksize = fsize if not count else count
272
273 timeout = self.gettimeout()
274 if timeout == 0:
275 raise ValueError("non-blocking sockets are not supported")
276 # poll/select have the advantage of not requiring any
277 # extra file descriptor, contrarily to epoll/kqueue
278 # (also, they require a single syscall).
279 if hasattr(selectors, 'PollSelector'):
280 selector = selectors.PollSelector()
281 else:
282 selector = selectors.SelectSelector()
283 selector.register(sockno, selectors.EVENT_WRITE)
284
285 total_sent = 0
286 # localize variable access to minimize overhead
287 selector_select = selector.select
288 os_sendfile = os.sendfile
289 try:
290 while True:
291 if timeout and not selector_select(timeout):
292 raise _socket.timeout('timed out')
293 if count:
294 blocksize = count - total_sent
295 if blocksize <= 0:
296 break
297 try:
298 sent = os_sendfile(sockno, fileno, offset, blocksize)
299 except BlockingIOError:
300 if not timeout:
301 # Block until the socket is ready to send some
302 # data; avoids hogging CPU resources.
303 selector_select()
304 continue
305 except OSError as err:
306 if total_sent == 0:
307 # We can get here for different reasons, the main
308 # one being 'file' is not a regular mmap(2)-like
309 # file, in which case we'll fall back on using
310 # plain send().
311 raise _GiveupOnSendfile(err)
312 raise err from None
313 else:
314 if sent == 0:
315 break # EOF
316 offset += sent
317 total_sent += sent
318 return total_sent
319 finally:
320 if total_sent > 0 and hasattr(file, 'seek'):
321 file.seek(offset)
322 else:
323 def _sendfile_use_sendfile(self, file, offset=0, count=None):
324 raise _GiveupOnSendfile(
325 "os.sendfile() not available on this platform")
326
327 def _sendfile_use_send(self, file, offset=0, count=None):
328 self._check_sendfile_params(file, offset, count)
329 if self.gettimeout() == 0:
330 raise ValueError("non-blocking sockets are not supported")
331 if offset:
332 file.seek(offset)
333 blocksize = min(count, 8192) if count else 8192
334 total_sent = 0
335 # localize variable access to minimize overhead
336 file_read = file.read
337 sock_send = self.send
338 try:
339 while True:
340 if count:
341 blocksize = min(count - total_sent, blocksize)
342 if blocksize <= 0:
343 break
344 data = memoryview(file_read(blocksize))
345 if not data:
346 break # EOF
347 while True:
348 try:
349 sent = sock_send(data)
350 except BlockingIOError:
351 continue
352 else:
353 total_sent += sent
354 if sent < len(data):
355 data = data[sent:]
356 else:
357 break
358 return total_sent
359 finally:
360 if total_sent > 0 and hasattr(file, 'seek'):
361 file.seek(offset + total_sent)
362
363 def _check_sendfile_params(self, file, offset, count):
364 if 'b' not in getattr(file, 'mode', 'b'):
365 raise ValueError("file should be opened in binary mode")
366 if not self.type & SOCK_STREAM:
367 raise ValueError("only SOCK_STREAM type sockets are supported")
368 if count is not None:
369 if not isinstance(count, int):
370 raise TypeError(
371 "count must be a positive integer (got {!r})".format(count))
372 if count <= 0:
373 raise ValueError(
374 "count must be a positive integer (got {!r})".format(count))
375
376 def sendfile(self, file, offset=0, count=None):
377 """sendfile(file[, offset[, count]]) -> sent
378
379 Send a file until EOF is reached by using high-performance
380 os.sendfile() and return the total number of bytes which
381 were sent.
382 *file* must be a regular file object opened in binary mode.
383 If os.sendfile() is not available (e.g. Windows) or file is
384 not a regular file socket.send() will be used instead.
385 *offset* tells from where to start reading the file.
386 If specified, *count* is the total number of bytes to transmit
387 as opposed to sending the file until EOF is reached.
388 File position is updated on return or also in case of error in
389 which case file.tell() can be used to figure out the number of
390 bytes which were sent.
391 The socket must be of SOCK_STREAM type.
392 Non-blocking sockets are not supported.
393 """
394 try:
395 return self._sendfile_use_sendfile(file, offset, count)
396 except _GiveupOnSendfile:
397 return self._sendfile_use_send(file, offset, count)
398
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000399 def _decref_socketios(self):
400 if self._io_refs > 0:
401 self._io_refs -= 1
402 if self._closed:
403 self.close()
404
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000405 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000406 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000407 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000408
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000409 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000410 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000411 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000412 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000413 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000414
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200415 def detach(self):
416 """detach() -> file descriptor
417
418 Close the socket object without closing the underlying file descriptor.
419 The object cannot be used after this call, but the file descriptor
420 can be reused for other purposes. The file descriptor is returned.
421 """
422 self._closed = True
423 return super().detach()
424
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700425 @property
426 def family(self):
427 """Read-only access to the address family for this socket.
428 """
429 return _intenum_converter(super().family, AddressFamily)
430
431 @property
432 def type(self):
433 """Read-only access to the socket type.
434 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700435 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700436
Victor Stinnerdaf45552013-08-28 00:53:59 +0200437 if os.name == 'nt':
438 def get_inheritable(self):
439 return os.get_handle_inheritable(self.fileno())
440 def set_inheritable(self, inheritable):
441 os.set_handle_inheritable(self.fileno(), inheritable)
442 else:
443 def get_inheritable(self):
444 return os.get_inheritable(self.fileno())
445 def set_inheritable(self, inheritable):
446 os.set_inheritable(self.fileno(), inheritable)
447 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
448 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
449
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000450def fromfd(fd, family, type, proto=0):
451 """ fromfd(fd, family, type[, proto]) -> socket object
452
453 Create a socket object from a duplicate of the given file
454 descriptor. The remaining arguments are the same as for socket().
455 """
456 nfd = dup(fd)
457 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000458
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000459if hasattr(_socket.socket, "share"):
460 def fromshare(info):
461 """ fromshare(info) -> socket object
462
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500463 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000464 socket.share(pid).
465 """
466 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700467 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000468
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000469if hasattr(_socket, "socketpair"):
470
471 def socketpair(family=None, type=SOCK_STREAM, proto=0):
472 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
473
474 Create a pair of socket objects from the sockets returned by the platform
475 socketpair() function.
476 The arguments are the same as for socket() except the default family is
477 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
478 """
479 if family is None:
480 try:
481 family = AF_UNIX
482 except NameError:
483 family = AF_INET
484 a, b = _socket.socketpair(family, type, proto)
485 a = socket(family, type, proto, a.detach())
486 b = socket(family, type, proto, b.detach())
487 return a, b
488
Charles-François Natali98c745a2014-10-14 21:22:44 +0100489else:
490
491 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
492 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
493 if family == AF_INET:
494 host = _LOCALHOST
495 elif family == AF_INET6:
496 host = _LOCALHOST_V6
497 else:
498 raise ValueError("Only AF_INET and AF_INET6 socket address families "
499 "are supported")
500 if type != SOCK_STREAM:
501 raise ValueError("Only SOCK_STREAM socket type is supported")
502 if proto != 0:
503 raise ValueError("Only protocol zero is supported")
504
505 # We create a connected TCP socket. Note the trick with
506 # setblocking(False) that prevents us from having to create a thread.
507 lsock = socket(family, type, proto)
508 try:
509 lsock.bind((host, 0))
510 lsock.listen()
511 # On IPv6, ignore flow_info and scope_id
512 addr, port = lsock.getsockname()[:2]
513 csock = socket(family, type, proto)
514 try:
515 csock.setblocking(False)
516 try:
517 csock.connect((addr, port))
518 except (BlockingIOError, InterruptedError):
519 pass
520 csock.setblocking(True)
521 ssock, _ = lsock.accept()
522 except:
523 csock.close()
524 raise
525 finally:
526 lsock.close()
527 return (ssock, csock)
Victor Stinner3da57432016-08-17 14:40:08 +0200528 __all__.append("socketpair")
Charles-François Natali98c745a2014-10-14 21:22:44 +0100529
530socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
531Create a pair of socket objects from the sockets returned by the platform
532socketpair() function.
533The arguments are the same as for socket() except the default family is AF_UNIX
534if defined on the platform; otherwise, the default is AF_INET.
535"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000536
Antoine Pitrou98b46702010-09-18 22:59:00 +0000537_blocking_errnos = { EAGAIN, EWOULDBLOCK }
538
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000539class SocketIO(io.RawIOBase):
540
541 """Raw I/O implementation for stream sockets.
542
543 This class supports the makefile() method on sockets. It provides
544 the raw I/O interface on top of a socket object.
545 """
546
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000547 # One might wonder why not let FileIO do the job instead. There are two
548 # main reasons why FileIO is not adapted:
549 # - it wouldn't work under Windows (where you can't used read() and
550 # write() on a socket handle)
551 # - it wouldn't work with socket timeouts (FileIO would ignore the
552 # timeout and consider the socket non-blocking)
553
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000554 # XXX More docs
555
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000556 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000557 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000558 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000559 io.RawIOBase.__init__(self)
560 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000561 if "b" not in mode:
562 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000563 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000564 self._reading = "r" in mode
565 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000566 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000567
568 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000569 """Read up to len(b) bytes into the writable buffer *b* and return
570 the number of bytes read. If the socket is non-blocking and no bytes
571 are available, None is returned.
572
573 If *b* is non-empty, a 0 return value indicates that the connection
574 was shutdown at the other end.
575 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000576 self._checkClosed()
577 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000578 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200579 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000580 while True:
581 try:
582 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000583 except timeout:
584 self._timeout_occurred = True
585 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000586 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200587 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000588 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000589 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000590
591 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000592 """Write the given bytes or bytearray object *b* to the socket
593 and return the number of bytes written. This can be less than
594 len(b) if not all data could be written. If the socket is
595 non-blocking and no bytes could be written None is returned.
596 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000597 self._checkClosed()
598 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000599 try:
600 return self._sock.send(b)
601 except error as e:
602 # XXX what about EINTR?
603 if e.args[0] in _blocking_errnos:
604 return None
605 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000606
607 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000608 """True if the SocketIO is open for reading.
609 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200610 if self.closed:
611 raise ValueError("I/O operation on closed socket.")
612 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000613
614 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000615 """True if the SocketIO is open for writing.
616 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200617 if self.closed:
618 raise ValueError("I/O operation on closed socket.")
619 return self._writing
620
621 def seekable(self):
622 """True if the SocketIO is open for seeking.
623 """
624 if self.closed:
625 raise ValueError("I/O operation on closed socket.")
626 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000627
628 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000629 """Return the file descriptor of the underlying socket.
630 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000631 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000632 return self._sock.fileno()
633
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000634 @property
635 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000636 if not self.closed:
637 return self.fileno()
638 else:
639 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000640
641 @property
642 def mode(self):
643 return self._mode
644
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000645 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000646 """Close the SocketIO object. This doesn't close the underlying
647 socket, except if all references to it have disappeared.
648 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000649 if self.closed:
650 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000651 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000652 self._sock._decref_socketios()
653 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000654
Fred Drakea6070f02000-08-16 14:14:32 +0000655
656def getfqdn(name=''):
657 """Get fully qualified domain name from name.
658
659 An empty argument is interpreted as meaning the local host.
660
661 First the hostname returned by gethostbyaddr() is checked, then
662 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000663 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000664 """
665 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000666 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000667 name = gethostname()
668 try:
669 hostname, aliases, ipaddrs = gethostbyaddr(name)
670 except error:
671 pass
672 else:
673 aliases.insert(0, hostname)
674 for name in aliases:
675 if '.' in name:
676 break
677 else:
678 name = hostname
679 return name
680
681
Georg Brandlf78e02b2008-06-10 17:40:04 +0000682_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000683
Gregory P. Smithb4066372010-01-03 03:28:29 +0000684def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
685 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000686 """Connect to *address* and return the socket object.
687
688 Convenience function. Connect to *address* (a 2-tuple ``(host,
689 port)``) and return the socket object. Passing the optional
690 *timeout* parameter will set the timeout on the socket instance
691 before attempting to connect. If no *timeout* is supplied, the
692 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000693 is used. If *source_address* is set it must be a tuple of (host, port)
694 for the socket to bind as a source address before making the connection.
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300695 A host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000696 """
697
Guido van Rossumd8faa362007-04-27 19:54:29 +0000698 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000699 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000700 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
701 af, socktype, proto, canonname, sa = res
702 sock = None
703 try:
704 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000705 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000706 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000707 if source_address:
708 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000709 sock.connect(sa)
Victor Stinneracb9fa72017-09-13 10:10:10 -0700710 # Break explicitly a reference cycle
711 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000712 return sock
713
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000714 except error as _:
715 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000716 if sock is not None:
717 sock.close()
718
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000719 if err is not None:
720 raise err
721 else:
722 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700723
724def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
725 """Resolve host and port into list of address info entries.
726
727 Translate the host/port argument into a sequence of 5-tuples that contain
728 all the necessary arguments for creating a socket connected to that service.
729 host is a domain name, a string representation of an IPv4/v6 address or
730 None. port is a string service name such as 'http', a numeric port number or
731 None. By passing None as the value of host and port, you can pass NULL to
732 the underlying C API.
733
734 The family, type and proto arguments can be optionally specified in order to
735 narrow the list of addresses returned. Passing zero as a value for each of
736 these arguments selects the full range of results.
737 """
738 # We override this function since we want to translate the numeric family
739 # and socket type values to enum constants.
740 addrlist = []
741 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
742 af, socktype, proto, canonname, sa = res
743 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700744 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700745 proto, canonname, sa))
746 return addrlist