blob: cfa605a22ada921e1a40148010d273a47a3f3d86 [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
Christian Heimesb6e43af2018-01-29 22:37:58 +0100139 def __init__(self, family=-1, type=-1, proto=-1, 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.
Christian Heimesb6e43af2018-01-29 22:37:58 +0100144 if fileno is None:
145 if family == -1:
146 family = AF_INET
147 if type == -1:
148 type = SOCK_STREAM
149 if proto == -1:
150 proto = 0
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000151 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000152 self._io_refs = 0
153 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000154
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000155 def __enter__(self):
156 return self
157
158 def __exit__(self, *args):
159 if not self._closed:
160 self.close()
161
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000162 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200163 """Wrap __repr__() to reveal the real class name and socket
164 address(es).
165 """
166 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200167 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200168 % (self.__class__.__module__,
Serhiy Storchaka521e5862014-07-22 15:00:37 +0300169 self.__class__.__qualname__,
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200170 " [closed]" if closed else "",
171 self.fileno(),
172 self.family,
173 self.type,
174 self.proto)
175 if not closed:
176 try:
177 laddr = self.getsockname()
178 if laddr:
179 s += ", laddr=%s" % str(laddr)
180 except error:
181 pass
182 try:
183 raddr = self.getpeername()
184 if raddr:
185 s += ", raddr=%s" % str(raddr)
186 except error:
187 pass
188 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000189 return s
190
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100191 def __getstate__(self):
192 raise TypeError("Cannot serialize socket object")
193
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000194 def dup(self):
195 """dup() -> socket object
196
Victor Stinnerdaf45552013-08-28 00:53:59 +0200197 Duplicate the socket. Return a new socket object connected to the same
198 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000199 """
200 fd = dup(self.fileno())
201 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
202 sock.settimeout(self.gettimeout())
203 return sock
204
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000205 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000206 """accept() -> (socket object, address info)
207
208 Wait for an incoming connection. Return a new socket
209 representing the connection, and the address of the client.
210 For IP sockets, the address info is a pair (hostaddr, port).
211 """
212 fd, addr = self._accept()
Yury Selivanov98181422017-12-18 20:02:54 -0500213 sock = socket(self.family, self.type, self.proto, fileno=fd)
Antoine Pitrou600232b2011-01-05 21:03:42 +0000214 # Issue #7995: if no default timeout is set and the listening
215 # socket had a (non-zero) timeout, force the new socket in blocking
216 # mode to override platform-specific socket flags inheritance.
217 if getdefaulttimeout() is None and self.gettimeout():
218 sock.setblocking(True)
219 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000220
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000221 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000222 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000223 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000224
Berker Peksag3fe64d02016-02-18 17:34:00 +0200225 The arguments are as for io.open() after the filename, except the only
226 supported mode values are 'r' (default), 'w' and 'b'.
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000227 """
Berker Peksag3fe64d02016-02-18 17:34:00 +0200228 # XXX refactor to share code?
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200229 if not set(mode) <= {"r", "w", "b"}:
230 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000231 writing = "w" in mode
232 reading = "r" in mode or not writing
233 assert reading or writing
234 binary = "b" in mode
235 rawmode = ""
236 if reading:
237 rawmode += "r"
238 if writing:
239 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000240 raw = SocketIO(self, rawmode)
241 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000242 if buffering is None:
243 buffering = -1
244 if buffering < 0:
245 buffering = io.DEFAULT_BUFFER_SIZE
246 if buffering == 0:
247 if not binary:
248 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000249 return raw
250 if reading and writing:
251 buffer = io.BufferedRWPair(raw, raw, buffering)
252 elif reading:
253 buffer = io.BufferedReader(raw, buffering)
254 else:
255 assert writing
256 buffer = io.BufferedWriter(raw, buffering)
257 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000258 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000259 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000260 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000261 return text
262
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200263 if hasattr(os, 'sendfile'):
264
265 def _sendfile_use_sendfile(self, file, offset=0, count=None):
266 self._check_sendfile_params(file, offset, count)
267 sockno = self.fileno()
268 try:
269 fileno = file.fileno()
270 except (AttributeError, io.UnsupportedOperation) as err:
271 raise _GiveupOnSendfile(err) # not a regular file
272 try:
273 fsize = os.fstat(fileno).st_size
Berker Peksagbcfb35f2016-09-17 23:22:06 +0300274 except OSError as err:
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200275 raise _GiveupOnSendfile(err) # not a regular file
276 if not fsize:
277 return 0 # empty file
278 blocksize = fsize if not count else count
279
280 timeout = self.gettimeout()
281 if timeout == 0:
282 raise ValueError("non-blocking sockets are not supported")
283 # poll/select have the advantage of not requiring any
284 # extra file descriptor, contrarily to epoll/kqueue
285 # (also, they require a single syscall).
286 if hasattr(selectors, 'PollSelector'):
287 selector = selectors.PollSelector()
288 else:
289 selector = selectors.SelectSelector()
290 selector.register(sockno, selectors.EVENT_WRITE)
291
292 total_sent = 0
293 # localize variable access to minimize overhead
294 selector_select = selector.select
295 os_sendfile = os.sendfile
296 try:
297 while True:
298 if timeout and not selector_select(timeout):
299 raise _socket.timeout('timed out')
300 if count:
301 blocksize = count - total_sent
302 if blocksize <= 0:
303 break
304 try:
305 sent = os_sendfile(sockno, fileno, offset, blocksize)
306 except BlockingIOError:
307 if not timeout:
308 # Block until the socket is ready to send some
309 # data; avoids hogging CPU resources.
310 selector_select()
311 continue
312 except OSError as err:
313 if total_sent == 0:
314 # We can get here for different reasons, the main
315 # one being 'file' is not a regular mmap(2)-like
316 # file, in which case we'll fall back on using
317 # plain send().
318 raise _GiveupOnSendfile(err)
319 raise err from None
320 else:
321 if sent == 0:
322 break # EOF
323 offset += sent
324 total_sent += sent
325 return total_sent
326 finally:
327 if total_sent > 0 and hasattr(file, 'seek'):
328 file.seek(offset)
329 else:
330 def _sendfile_use_sendfile(self, file, offset=0, count=None):
331 raise _GiveupOnSendfile(
332 "os.sendfile() not available on this platform")
333
334 def _sendfile_use_send(self, file, offset=0, count=None):
335 self._check_sendfile_params(file, offset, count)
336 if self.gettimeout() == 0:
337 raise ValueError("non-blocking sockets are not supported")
338 if offset:
339 file.seek(offset)
340 blocksize = min(count, 8192) if count else 8192
341 total_sent = 0
342 # localize variable access to minimize overhead
343 file_read = file.read
344 sock_send = self.send
345 try:
346 while True:
347 if count:
348 blocksize = min(count - total_sent, blocksize)
349 if blocksize <= 0:
350 break
351 data = memoryview(file_read(blocksize))
352 if not data:
353 break # EOF
354 while True:
355 try:
356 sent = sock_send(data)
357 except BlockingIOError:
358 continue
359 else:
360 total_sent += sent
361 if sent < len(data):
362 data = data[sent:]
363 else:
364 break
365 return total_sent
366 finally:
367 if total_sent > 0 and hasattr(file, 'seek'):
368 file.seek(offset + total_sent)
369
370 def _check_sendfile_params(self, file, offset, count):
371 if 'b' not in getattr(file, 'mode', 'b'):
372 raise ValueError("file should be opened in binary mode")
373 if not self.type & SOCK_STREAM:
374 raise ValueError("only SOCK_STREAM type sockets are supported")
375 if count is not None:
376 if not isinstance(count, int):
377 raise TypeError(
378 "count must be a positive integer (got {!r})".format(count))
379 if count <= 0:
380 raise ValueError(
381 "count must be a positive integer (got {!r})".format(count))
382
383 def sendfile(self, file, offset=0, count=None):
384 """sendfile(file[, offset[, count]]) -> sent
385
386 Send a file until EOF is reached by using high-performance
387 os.sendfile() and return the total number of bytes which
388 were sent.
389 *file* must be a regular file object opened in binary mode.
390 If os.sendfile() is not available (e.g. Windows) or file is
391 not a regular file socket.send() will be used instead.
392 *offset* tells from where to start reading the file.
393 If specified, *count* is the total number of bytes to transmit
394 as opposed to sending the file until EOF is reached.
395 File position is updated on return or also in case of error in
396 which case file.tell() can be used to figure out the number of
397 bytes which were sent.
398 The socket must be of SOCK_STREAM type.
399 Non-blocking sockets are not supported.
400 """
401 try:
402 return self._sendfile_use_sendfile(file, offset, count)
403 except _GiveupOnSendfile:
404 return self._sendfile_use_send(file, offset, count)
405
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000406 def _decref_socketios(self):
407 if self._io_refs > 0:
408 self._io_refs -= 1
409 if self._closed:
410 self.close()
411
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000412 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000413 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000414 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000415
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000416 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000417 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000418 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000419 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000420 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000421
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200422 def detach(self):
423 """detach() -> file descriptor
424
425 Close the socket object without closing the underlying file descriptor.
426 The object cannot be used after this call, but the file descriptor
427 can be reused for other purposes. The file descriptor is returned.
428 """
429 self._closed = True
430 return super().detach()
431
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700432 @property
433 def family(self):
434 """Read-only access to the address family for this socket.
435 """
436 return _intenum_converter(super().family, AddressFamily)
437
438 @property
439 def type(self):
440 """Read-only access to the socket type.
441 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700442 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700443
Victor Stinnerdaf45552013-08-28 00:53:59 +0200444 if os.name == 'nt':
445 def get_inheritable(self):
446 return os.get_handle_inheritable(self.fileno())
447 def set_inheritable(self, inheritable):
448 os.set_handle_inheritable(self.fileno(), inheritable)
449 else:
450 def get_inheritable(self):
451 return os.get_inheritable(self.fileno())
452 def set_inheritable(self, inheritable):
453 os.set_inheritable(self.fileno(), inheritable)
454 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
455 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
456
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000457def fromfd(fd, family, type, proto=0):
458 """ fromfd(fd, family, type[, proto]) -> socket object
459
460 Create a socket object from a duplicate of the given file
461 descriptor. The remaining arguments are the same as for socket().
462 """
463 nfd = dup(fd)
464 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000465
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000466if hasattr(_socket.socket, "share"):
467 def fromshare(info):
468 """ fromshare(info) -> socket object
469
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500470 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000471 socket.share(pid).
472 """
473 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700474 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000475
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000476if hasattr(_socket, "socketpair"):
477
478 def socketpair(family=None, type=SOCK_STREAM, proto=0):
479 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
480
481 Create a pair of socket objects from the sockets returned by the platform
482 socketpair() function.
483 The arguments are the same as for socket() except the default family is
484 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
485 """
486 if family is None:
487 try:
488 family = AF_UNIX
489 except NameError:
490 family = AF_INET
491 a, b = _socket.socketpair(family, type, proto)
492 a = socket(family, type, proto, a.detach())
493 b = socket(family, type, proto, b.detach())
494 return a, b
495
Charles-François Natali98c745a2014-10-14 21:22:44 +0100496else:
497
498 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
499 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
500 if family == AF_INET:
501 host = _LOCALHOST
502 elif family == AF_INET6:
503 host = _LOCALHOST_V6
504 else:
505 raise ValueError("Only AF_INET and AF_INET6 socket address families "
506 "are supported")
507 if type != SOCK_STREAM:
508 raise ValueError("Only SOCK_STREAM socket type is supported")
509 if proto != 0:
510 raise ValueError("Only protocol zero is supported")
511
512 # We create a connected TCP socket. Note the trick with
513 # setblocking(False) that prevents us from having to create a thread.
514 lsock = socket(family, type, proto)
515 try:
516 lsock.bind((host, 0))
517 lsock.listen()
518 # On IPv6, ignore flow_info and scope_id
519 addr, port = lsock.getsockname()[:2]
520 csock = socket(family, type, proto)
521 try:
522 csock.setblocking(False)
523 try:
524 csock.connect((addr, port))
525 except (BlockingIOError, InterruptedError):
526 pass
527 csock.setblocking(True)
528 ssock, _ = lsock.accept()
529 except:
530 csock.close()
531 raise
532 finally:
533 lsock.close()
534 return (ssock, csock)
Victor Stinner3da57432016-08-17 14:40:08 +0200535 __all__.append("socketpair")
Charles-François Natali98c745a2014-10-14 21:22:44 +0100536
537socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
538Create a pair of socket objects from the sockets returned by the platform
539socketpair() function.
540The arguments are the same as for socket() except the default family is AF_UNIX
541if defined on the platform; otherwise, the default is AF_INET.
542"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000543
Antoine Pitrou98b46702010-09-18 22:59:00 +0000544_blocking_errnos = { EAGAIN, EWOULDBLOCK }
545
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000546class SocketIO(io.RawIOBase):
547
548 """Raw I/O implementation for stream sockets.
549
550 This class supports the makefile() method on sockets. It provides
551 the raw I/O interface on top of a socket object.
552 """
553
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000554 # One might wonder why not let FileIO do the job instead. There are two
555 # main reasons why FileIO is not adapted:
556 # - it wouldn't work under Windows (where you can't used read() and
557 # write() on a socket handle)
558 # - it wouldn't work with socket timeouts (FileIO would ignore the
559 # timeout and consider the socket non-blocking)
560
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000561 # XXX More docs
562
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000563 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000564 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000565 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000566 io.RawIOBase.__init__(self)
567 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000568 if "b" not in mode:
569 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000570 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000571 self._reading = "r" in mode
572 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000573 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000574
575 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000576 """Read up to len(b) bytes into the writable buffer *b* and return
577 the number of bytes read. If the socket is non-blocking and no bytes
578 are available, None is returned.
579
580 If *b* is non-empty, a 0 return value indicates that the connection
581 was shutdown at the other end.
582 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000583 self._checkClosed()
584 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000585 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200586 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000587 while True:
588 try:
589 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000590 except timeout:
591 self._timeout_occurred = True
592 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000593 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200594 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000595 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000596 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000597
598 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000599 """Write the given bytes or bytearray object *b* to the socket
600 and return the number of bytes written. This can be less than
601 len(b) if not all data could be written. If the socket is
602 non-blocking and no bytes could be written None is returned.
603 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000604 self._checkClosed()
605 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000606 try:
607 return self._sock.send(b)
608 except error as e:
609 # XXX what about EINTR?
610 if e.args[0] in _blocking_errnos:
611 return None
612 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000613
614 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000615 """True if the SocketIO is open for reading.
616 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200617 if self.closed:
618 raise ValueError("I/O operation on closed socket.")
619 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000620
621 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000622 """True if the SocketIO is open for writing.
623 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200624 if self.closed:
625 raise ValueError("I/O operation on closed socket.")
626 return self._writing
627
628 def seekable(self):
629 """True if the SocketIO is open for seeking.
630 """
631 if self.closed:
632 raise ValueError("I/O operation on closed socket.")
633 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000634
635 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000636 """Return the file descriptor of the underlying socket.
637 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000638 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000639 return self._sock.fileno()
640
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000641 @property
642 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000643 if not self.closed:
644 return self.fileno()
645 else:
646 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000647
648 @property
649 def mode(self):
650 return self._mode
651
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000652 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000653 """Close the SocketIO object. This doesn't close the underlying
654 socket, except if all references to it have disappeared.
655 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000656 if self.closed:
657 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000658 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000659 self._sock._decref_socketios()
660 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000661
Fred Drakea6070f02000-08-16 14:14:32 +0000662
663def getfqdn(name=''):
664 """Get fully qualified domain name from name.
665
666 An empty argument is interpreted as meaning the local host.
667
668 First the hostname returned by gethostbyaddr() is checked, then
669 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000670 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000671 """
672 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000673 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000674 name = gethostname()
675 try:
676 hostname, aliases, ipaddrs = gethostbyaddr(name)
677 except error:
678 pass
679 else:
680 aliases.insert(0, hostname)
681 for name in aliases:
682 if '.' in name:
683 break
684 else:
685 name = hostname
686 return name
687
688
Georg Brandlf78e02b2008-06-10 17:40:04 +0000689_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000690
Gregory P. Smithb4066372010-01-03 03:28:29 +0000691def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
692 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000693 """Connect to *address* and return the socket object.
694
695 Convenience function. Connect to *address* (a 2-tuple ``(host,
696 port)``) and return the socket object. Passing the optional
697 *timeout* parameter will set the timeout on the socket instance
698 before attempting to connect. If no *timeout* is supplied, the
699 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000700 is used. If *source_address* is set it must be a tuple of (host, port)
701 for the socket to bind as a source address before making the connection.
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300702 A host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000703 """
704
Guido van Rossumd8faa362007-04-27 19:54:29 +0000705 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000706 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000707 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
708 af, socktype, proto, canonname, sa = res
709 sock = None
710 try:
711 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000712 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000713 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000714 if source_address:
715 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000716 sock.connect(sa)
Victor Stinneracb9fa72017-09-13 10:10:10 -0700717 # Break explicitly a reference cycle
718 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000719 return sock
720
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000721 except error as _:
722 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000723 if sock is not None:
724 sock.close()
725
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000726 if err is not None:
727 raise err
728 else:
729 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700730
731def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
732 """Resolve host and port into list of address info entries.
733
734 Translate the host/port argument into a sequence of 5-tuples that contain
735 all the necessary arguments for creating a socket connected to that service.
736 host is a domain name, a string representation of an IPv4/v6 address or
737 None. port is a string service name such as 'http', a numeric port number or
738 None. By passing None as the value of host and port, you can pass NULL to
739 the underlying C API.
740
741 The family, type and proto arguments can be optionally specified in order to
742 narrow the list of addresses returned. Passing zero as a value for each of
743 these arguments selects the full range of results.
744 """
745 # We override this function since we want to translate the numeric family
746 # and socket type values to enum constants.
747 addrlist = []
748 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
749 af, socktype, proto, canonname, sa = res
750 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700751 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700752 proto, canonname, sa))
753 return addrlist