blob: a9cab32e31ebe30f74b716a7490165c9a790c3d4 [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
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070053from enum import IntEnum
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
83_LOCALHOST = '127.0.0.1'
84_LOCALHOST_V6 = '::1'
85
86
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -070087def _intenum_converter(value, enum_klass):
88 """Convert a numeric family value to an IntEnum member.
89
90 If it's not a known member, return the numeric value itself.
91 """
92 try:
93 return enum_klass(value)
94 except ValueError:
95 return value
Thomas Wouters47b49bf2007-08-30 22:15:33 +000096
97_realsocket = socket
Skip Montanaro0de65802001-02-15 22:15:14 +000098
Fred Drakea6070f02000-08-16 14:14:32 +000099# WSA error codes
100if sys.platform.lower().startswith("win"):
101 errorTab = {}
102 errorTab[10004] = "The operation was interrupted."
103 errorTab[10009] = "A bad file handle was passed."
104 errorTab[10013] = "Permission denied."
105 errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
106 errorTab[10022] = "An invalid operation was attempted."
107 errorTab[10035] = "The socket operation would block"
108 errorTab[10036] = "A blocking operation is already in progress."
109 errorTab[10048] = "The network address is in use."
110 errorTab[10054] = "The connection has been reset."
111 errorTab[10058] = "The network has been shut down."
112 errorTab[10060] = "The operation timed out."
113 errorTab[10061] = "Connection refused."
114 errorTab[10063] = "The name is too long."
115 errorTab[10064] = "The host is down."
116 errorTab[10065] = "The host is unreachable."
Skip Montanaro64de1a42001-03-18 19:53:21 +0000117 __all__.append("errorTab")
Guido van Rossumde7cade2002-08-08 15:25:28 +0000118
Fred Drakea6070f02000-08-16 14:14:32 +0000119
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200120class _GiveupOnSendfile(Exception): pass
121
122
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000123class socket(_socket.socket):
124
125 """A subclass of _socket.socket adding the makefile() method."""
126
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000127 __slots__ = ["__weakref__", "_io_refs", "_closed"]
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000128
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000129 def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700130 # For user code address family and type values are IntEnum members, but
131 # for the underlying _socket.socket they're just integers. The
132 # constructor of _socket.socket converts the given argument to an
133 # integer automatically.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000134 _socket.socket.__init__(self, family, type, proto, fileno)
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000135 self._io_refs = 0
136 self._closed = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000137
Giampaolo Rodolàb383dbb2010-09-08 22:44:12 +0000138 def __enter__(self):
139 return self
140
141 def __exit__(self, *args):
142 if not self._closed:
143 self.close()
144
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000145 def __repr__(self):
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200146 """Wrap __repr__() to reveal the real class name and socket
147 address(es).
148 """
149 closed = getattr(self, '_closed', False)
Giampaolo Rodola'b6281492013-10-03 21:01:43 +0200150 s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200151 % (self.__class__.__module__,
Serhiy Storchaka521e5862014-07-22 15:00:37 +0300152 self.__class__.__qualname__,
Giampaolo Rodola'50331cb2013-04-10 15:49:47 +0200153 " [closed]" if closed else "",
154 self.fileno(),
155 self.family,
156 self.type,
157 self.proto)
158 if not closed:
159 try:
160 laddr = self.getsockname()
161 if laddr:
162 s += ", laddr=%s" % str(laddr)
163 except error:
164 pass
165 try:
166 raddr = self.getpeername()
167 if raddr:
168 s += ", raddr=%s" % str(raddr)
169 except error:
170 pass
171 s += '>'
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000172 return s
173
Antoine Pitrou6d58d642011-03-20 23:56:36 +0100174 def __getstate__(self):
175 raise TypeError("Cannot serialize socket object")
176
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000177 def dup(self):
178 """dup() -> socket object
179
Victor Stinnerdaf45552013-08-28 00:53:59 +0200180 Duplicate the socket. Return a new socket object connected to the same
181 system resource. The new socket is non-inheritable.
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000182 """
183 fd = dup(self.fileno())
184 sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
185 sock.settimeout(self.gettimeout())
186 return sock
187
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000188 def accept(self):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000189 """accept() -> (socket object, address info)
190
191 Wait for an incoming connection. Return a new socket
192 representing the connection, and the address of the client.
193 For IP sockets, the address info is a pair (hostaddr, port).
194 """
195 fd, addr = self._accept()
Benjamin Petersond9dbf492015-10-24 20:06:04 -0700196 # If our type has the SOCK_NONBLOCK flag, we shouldn't pass it onto the
197 # new socket. We do not currently allow passing SOCK_NONBLOCK to
198 # accept4, so the returned socket is always blocking.
199 type = self.type & ~globals().get("SOCK_NONBLOCK", 0)
200 sock = socket(self.family, type, self.proto, fileno=fd)
Antoine Pitrou600232b2011-01-05 21:03:42 +0000201 # Issue #7995: if no default timeout is set and the listening
202 # socket had a (non-zero) timeout, force the new socket in blocking
203 # mode to override platform-specific socket flags inheritance.
204 if getdefaulttimeout() is None and self.gettimeout():
205 sock.setblocking(True)
206 return sock, addr
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000207
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000208 def makefile(self, mode="r", buffering=None, *,
Antoine Pitrou834bd812010-10-13 16:17:14 +0000209 encoding=None, errors=None, newline=None):
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000210 """makefile(...) -> an I/O stream connected to the socket
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000211
Berker Peksag3fe64d02016-02-18 17:34:00 +0200212 The arguments are as for io.open() after the filename, except the only
213 supported mode values are 'r' (default), 'w' and 'b'.
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000214 """
Berker Peksag3fe64d02016-02-18 17:34:00 +0200215 # XXX refactor to share code?
Serhiy Storchakafca2fc02014-11-19 12:33:40 +0200216 if not set(mode) <= {"r", "w", "b"}:
217 raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000218 writing = "w" in mode
219 reading = "r" in mode or not writing
220 assert reading or writing
221 binary = "b" in mode
222 rawmode = ""
223 if reading:
224 rawmode += "r"
225 if writing:
226 rawmode += "w"
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000227 raw = SocketIO(self, rawmode)
228 self._io_refs += 1
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000229 if buffering is None:
230 buffering = -1
231 if buffering < 0:
232 buffering = io.DEFAULT_BUFFER_SIZE
233 if buffering == 0:
234 if not binary:
235 raise ValueError("unbuffered streams must be binary")
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000236 return raw
237 if reading and writing:
238 buffer = io.BufferedRWPair(raw, raw, buffering)
239 elif reading:
240 buffer = io.BufferedReader(raw, buffering)
241 else:
242 assert writing
243 buffer = io.BufferedWriter(raw, buffering)
244 if binary:
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000245 return buffer
Antoine Pitrou834bd812010-10-13 16:17:14 +0000246 text = io.TextIOWrapper(buffer, encoding, errors, newline)
Guido van Rossum93adc5d2007-07-17 20:41:19 +0000247 text.mode = mode
Guido van Rossum7d0a8262007-05-21 23:13:11 +0000248 return text
249
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200250 if hasattr(os, 'sendfile'):
251
252 def _sendfile_use_sendfile(self, file, offset=0, count=None):
253 self._check_sendfile_params(file, offset, count)
254 sockno = self.fileno()
255 try:
256 fileno = file.fileno()
257 except (AttributeError, io.UnsupportedOperation) as err:
258 raise _GiveupOnSendfile(err) # not a regular file
259 try:
260 fsize = os.fstat(fileno).st_size
Berker Peksagbcfb35f2016-09-17 23:22:06 +0300261 except OSError as err:
Giampaolo Rodola'915d1412014-06-11 03:54:30 +0200262 raise _GiveupOnSendfile(err) # not a regular file
263 if not fsize:
264 return 0 # empty file
265 blocksize = fsize if not count else count
266
267 timeout = self.gettimeout()
268 if timeout == 0:
269 raise ValueError("non-blocking sockets are not supported")
270 # poll/select have the advantage of not requiring any
271 # extra file descriptor, contrarily to epoll/kqueue
272 # (also, they require a single syscall).
273 if hasattr(selectors, 'PollSelector'):
274 selector = selectors.PollSelector()
275 else:
276 selector = selectors.SelectSelector()
277 selector.register(sockno, selectors.EVENT_WRITE)
278
279 total_sent = 0
280 # localize variable access to minimize overhead
281 selector_select = selector.select
282 os_sendfile = os.sendfile
283 try:
284 while True:
285 if timeout and not selector_select(timeout):
286 raise _socket.timeout('timed out')
287 if count:
288 blocksize = count - total_sent
289 if blocksize <= 0:
290 break
291 try:
292 sent = os_sendfile(sockno, fileno, offset, blocksize)
293 except BlockingIOError:
294 if not timeout:
295 # Block until the socket is ready to send some
296 # data; avoids hogging CPU resources.
297 selector_select()
298 continue
299 except OSError as err:
300 if total_sent == 0:
301 # We can get here for different reasons, the main
302 # one being 'file' is not a regular mmap(2)-like
303 # file, in which case we'll fall back on using
304 # plain send().
305 raise _GiveupOnSendfile(err)
306 raise err from None
307 else:
308 if sent == 0:
309 break # EOF
310 offset += sent
311 total_sent += sent
312 return total_sent
313 finally:
314 if total_sent > 0 and hasattr(file, 'seek'):
315 file.seek(offset)
316 else:
317 def _sendfile_use_sendfile(self, file, offset=0, count=None):
318 raise _GiveupOnSendfile(
319 "os.sendfile() not available on this platform")
320
321 def _sendfile_use_send(self, file, offset=0, count=None):
322 self._check_sendfile_params(file, offset, count)
323 if self.gettimeout() == 0:
324 raise ValueError("non-blocking sockets are not supported")
325 if offset:
326 file.seek(offset)
327 blocksize = min(count, 8192) if count else 8192
328 total_sent = 0
329 # localize variable access to minimize overhead
330 file_read = file.read
331 sock_send = self.send
332 try:
333 while True:
334 if count:
335 blocksize = min(count - total_sent, blocksize)
336 if blocksize <= 0:
337 break
338 data = memoryview(file_read(blocksize))
339 if not data:
340 break # EOF
341 while True:
342 try:
343 sent = sock_send(data)
344 except BlockingIOError:
345 continue
346 else:
347 total_sent += sent
348 if sent < len(data):
349 data = data[sent:]
350 else:
351 break
352 return total_sent
353 finally:
354 if total_sent > 0 and hasattr(file, 'seek'):
355 file.seek(offset + total_sent)
356
357 def _check_sendfile_params(self, file, offset, count):
358 if 'b' not in getattr(file, 'mode', 'b'):
359 raise ValueError("file should be opened in binary mode")
360 if not self.type & SOCK_STREAM:
361 raise ValueError("only SOCK_STREAM type sockets are supported")
362 if count is not None:
363 if not isinstance(count, int):
364 raise TypeError(
365 "count must be a positive integer (got {!r})".format(count))
366 if count <= 0:
367 raise ValueError(
368 "count must be a positive integer (got {!r})".format(count))
369
370 def sendfile(self, file, offset=0, count=None):
371 """sendfile(file[, offset[, count]]) -> sent
372
373 Send a file until EOF is reached by using high-performance
374 os.sendfile() and return the total number of bytes which
375 were sent.
376 *file* must be a regular file object opened in binary mode.
377 If os.sendfile() is not available (e.g. Windows) or file is
378 not a regular file socket.send() will be used instead.
379 *offset* tells from where to start reading the file.
380 If specified, *count* is the total number of bytes to transmit
381 as opposed to sending the file until EOF is reached.
382 File position is updated on return or also in case of error in
383 which case file.tell() can be used to figure out the number of
384 bytes which were sent.
385 The socket must be of SOCK_STREAM type.
386 Non-blocking sockets are not supported.
387 """
388 try:
389 return self._sendfile_use_sendfile(file, offset, count)
390 except _GiveupOnSendfile:
391 return self._sendfile_use_send(file, offset, count)
392
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000393 def _decref_socketios(self):
394 if self._io_refs > 0:
395 self._io_refs -= 1
396 if self._closed:
397 self.close()
398
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000399 def _real_close(self, _ss=_socket.socket):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000400 # This function should not reference any globals. See issue #808164.
Daniel Stutzbach19d6a4f2010-08-31 20:08:07 +0000401 _ss.close(self)
Bill Janssen54cc54c2007-12-14 22:08:56 +0000402
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000403 def close(self):
Benjamin Peterson49203dc2010-08-31 20:10:55 +0000404 # This function should not reference any globals. See issue #808164.
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000405 self._closed = True
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000406 if self._io_refs <= 0:
Bill Janssen54cc54c2007-12-14 22:08:56 +0000407 self._real_close()
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000408
Antoine Pitrou70deb3d2012-04-01 01:00:17 +0200409 def detach(self):
410 """detach() -> file descriptor
411
412 Close the socket object without closing the underlying file descriptor.
413 The object cannot be used after this call, but the file descriptor
414 can be reused for other purposes. The file descriptor is returned.
415 """
416 self._closed = True
417 return super().detach()
418
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700419 @property
420 def family(self):
421 """Read-only access to the address family for this socket.
422 """
423 return _intenum_converter(super().family, AddressFamily)
424
425 @property
426 def type(self):
427 """Read-only access to the socket type.
428 """
Ethan Furman7184bac2014-10-14 18:56:53 -0700429 return _intenum_converter(super().type, SocketKind)
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700430
Victor Stinnerdaf45552013-08-28 00:53:59 +0200431 if os.name == 'nt':
432 def get_inheritable(self):
433 return os.get_handle_inheritable(self.fileno())
434 def set_inheritable(self, inheritable):
435 os.set_handle_inheritable(self.fileno(), inheritable)
436 else:
437 def get_inheritable(self):
438 return os.get_inheritable(self.fileno())
439 def set_inheritable(self, inheritable):
440 os.set_inheritable(self.fileno(), inheritable)
441 get_inheritable.__doc__ = "Get the inheritable flag of the socket"
442 set_inheritable.__doc__ = "Set the inheritable flag of the socket"
443
Guido van Rossum39eb8fa2007-11-16 01:24:05 +0000444def fromfd(fd, family, type, proto=0):
445 """ fromfd(fd, family, type[, proto]) -> socket object
446
447 Create a socket object from a duplicate of the given file
448 descriptor. The remaining arguments are the same as for socket().
449 """
450 nfd = dup(fd)
451 return socket(family, type, proto, nfd)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000452
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000453if hasattr(_socket.socket, "share"):
454 def fromshare(info):
455 """ fromshare(info) -> socket object
456
Benjamin Peterson82f34ad2015-01-13 09:17:24 -0500457 Create a socket object from the bytes object returned by
Kristján Valur Jónsson10f383a2012-04-07 11:23:31 +0000458 socket.share(pid).
459 """
460 return socket(0, 0, 0, info)
Ethan Furman8e120ac2014-10-18 15:10:49 -0700461 __all__.append("fromshare")
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000462
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000463if hasattr(_socket, "socketpair"):
464
465 def socketpair(family=None, type=SOCK_STREAM, proto=0):
466 """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
467
468 Create a pair of socket objects from the sockets returned by the platform
469 socketpair() function.
470 The arguments are the same as for socket() except the default family is
471 AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
472 """
473 if family is None:
474 try:
475 family = AF_UNIX
476 except NameError:
477 family = AF_INET
478 a, b = _socket.socketpair(family, type, proto)
479 a = socket(family, type, proto, a.detach())
480 b = socket(family, type, proto, b.detach())
481 return a, b
482
Charles-François Natali98c745a2014-10-14 21:22:44 +0100483else:
484
485 # Origin: https://gist.github.com/4325783, by Geert Jansen. Public domain.
486 def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
487 if family == AF_INET:
488 host = _LOCALHOST
489 elif family == AF_INET6:
490 host = _LOCALHOST_V6
491 else:
492 raise ValueError("Only AF_INET and AF_INET6 socket address families "
493 "are supported")
494 if type != SOCK_STREAM:
495 raise ValueError("Only SOCK_STREAM socket type is supported")
496 if proto != 0:
497 raise ValueError("Only protocol zero is supported")
498
499 # We create a connected TCP socket. Note the trick with
500 # setblocking(False) that prevents us from having to create a thread.
501 lsock = socket(family, type, proto)
502 try:
503 lsock.bind((host, 0))
504 lsock.listen()
505 # On IPv6, ignore flow_info and scope_id
506 addr, port = lsock.getsockname()[:2]
507 csock = socket(family, type, proto)
508 try:
509 csock.setblocking(False)
510 try:
511 csock.connect((addr, port))
512 except (BlockingIOError, InterruptedError):
513 pass
514 csock.setblocking(True)
515 ssock, _ = lsock.accept()
516 except:
517 csock.close()
518 raise
519 finally:
520 lsock.close()
521 return (ssock, csock)
Victor Stinner3da57432016-08-17 14:40:08 +0200522 __all__.append("socketpair")
Charles-François Natali98c745a2014-10-14 21:22:44 +0100523
524socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
525Create a pair of socket objects from the sockets returned by the platform
526socketpair() function.
527The arguments are the same as for socket() except the default family is AF_UNIX
528if defined on the platform; otherwise, the default is AF_INET.
529"""
Antoine Pitrou9e0b8642010-09-14 18:00:02 +0000530
Antoine Pitrou98b46702010-09-18 22:59:00 +0000531_blocking_errnos = { EAGAIN, EWOULDBLOCK }
532
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000533class SocketIO(io.RawIOBase):
534
535 """Raw I/O implementation for stream sockets.
536
537 This class supports the makefile() method on sockets. It provides
538 the raw I/O interface on top of a socket object.
539 """
540
Antoine Pitrou872b79d2010-09-15 08:39:25 +0000541 # One might wonder why not let FileIO do the job instead. There are two
542 # main reasons why FileIO is not adapted:
543 # - it wouldn't work under Windows (where you can't used read() and
544 # write() on a socket handle)
545 # - it wouldn't work with socket timeouts (FileIO would ignore the
546 # timeout and consider the socket non-blocking)
547
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000548 # XXX More docs
549
Guido van Rossum86bc33c2007-11-14 22:32:02 +0000550 def __init__(self, sock, mode):
Benjamin Peterson44309e62008-11-22 00:41:45 +0000551 if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
Guido van Rossum5abbf752007-08-27 17:39:33 +0000552 raise ValueError("invalid mode: %r" % mode)
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000553 io.RawIOBase.__init__(self)
554 self._sock = sock
Benjamin Peterson44309e62008-11-22 00:41:45 +0000555 if "b" not in mode:
556 mode += "b"
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000557 self._mode = mode
Guido van Rossum5abbf752007-08-27 17:39:33 +0000558 self._reading = "r" in mode
559 self._writing = "w" in mode
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000560 self._timeout_occurred = False
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000561
562 def readinto(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000563 """Read up to len(b) bytes into the writable buffer *b* and return
564 the number of bytes read. If the socket is non-blocking and no bytes
565 are available, None is returned.
566
567 If *b* is non-empty, a 0 return value indicates that the connection
568 was shutdown at the other end.
569 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000570 self._checkClosed()
571 self._checkReadable()
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000572 if self._timeout_occurred:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200573 raise OSError("cannot read from timed out object")
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000574 while True:
575 try:
576 return self._sock.recv_into(b)
Antoine Pitrou68e5c042011-02-25 23:07:44 +0000577 except timeout:
578 self._timeout_occurred = True
579 raise
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000580 except error as e:
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200581 if e.args[0] in _blocking_errnos:
Antoine Pitrou98b46702010-09-18 22:59:00 +0000582 return None
Gregory P. Smithaafdca82010-01-04 04:50:36 +0000583 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000584
585 def write(self, b):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000586 """Write the given bytes or bytearray object *b* to the socket
587 and return the number of bytes written. This can be less than
588 len(b) if not all data could be written. If the socket is
589 non-blocking and no bytes could be written None is returned.
590 """
Guido van Rossum5abbf752007-08-27 17:39:33 +0000591 self._checkClosed()
592 self._checkWritable()
Antoine Pitrou98b46702010-09-18 22:59:00 +0000593 try:
594 return self._sock.send(b)
595 except error as e:
596 # XXX what about EINTR?
597 if e.args[0] in _blocking_errnos:
598 return None
599 raise
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000600
601 def readable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000602 """True if the SocketIO is open for reading.
603 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200604 if self.closed:
605 raise ValueError("I/O operation on closed socket.")
606 return self._reading
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000607
608 def writable(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000609 """True if the SocketIO is open for writing.
610 """
Antoine Pitrou1e7ee9d2012-09-14 17:28:10 +0200611 if self.closed:
612 raise ValueError("I/O operation on closed socket.")
613 return self._writing
614
615 def seekable(self):
616 """True if the SocketIO is open for seeking.
617 """
618 if self.closed:
619 raise ValueError("I/O operation on closed socket.")
620 return super().seekable()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000621
622 def fileno(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000623 """Return the file descriptor of the underlying socket.
624 """
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000625 self._checkClosed()
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000626 return self._sock.fileno()
627
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000628 @property
629 def name(self):
Victor Stinnerc3a51ec2011-01-04 11:00:45 +0000630 if not self.closed:
631 return self.fileno()
632 else:
633 return -1
Amaury Forgeot d'Arc9d24ff02008-11-20 23:15:52 +0000634
635 @property
636 def mode(self):
637 return self._mode
638
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000639 def close(self):
Antoine Pitrou5aa0d102010-09-15 09:32:45 +0000640 """Close the SocketIO object. This doesn't close the underlying
641 socket, except if all references to it have disappeared.
642 """
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000643 if self.closed:
644 return
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000645 io.RawIOBase.close(self)
Gregory P. Smithde3369f2009-01-12 04:50:11 +0000646 self._sock._decref_socketios()
647 self._sock = None
Jeremy Hylton5accbdb2007-08-03 20:40:09 +0000648
Fred Drakea6070f02000-08-16 14:14:32 +0000649
650def getfqdn(name=''):
651 """Get fully qualified domain name from name.
652
653 An empty argument is interpreted as meaning the local host.
654
655 First the hostname returned by gethostbyaddr() is checked, then
656 possibly existing aliases. In case no FQDN is available, hostname
Brett Cannon01668a12005-03-11 00:04:17 +0000657 from gethostname() is returned.
Fred Drakea6070f02000-08-16 14:14:32 +0000658 """
659 name = name.strip()
Peter Schneider-Kamp2d2785a2000-08-16 20:30:21 +0000660 if not name or name == '0.0.0.0':
Fred Drakea6070f02000-08-16 14:14:32 +0000661 name = gethostname()
662 try:
663 hostname, aliases, ipaddrs = gethostbyaddr(name)
664 except error:
665 pass
666 else:
667 aliases.insert(0, hostname)
668 for name in aliases:
669 if '.' in name:
670 break
671 else:
672 name = hostname
673 return name
674
675
Georg Brandlf78e02b2008-06-10 17:40:04 +0000676_GLOBAL_DEFAULT_TIMEOUT = object()
Guido van Rossumd8faa362007-04-27 19:54:29 +0000677
Gregory P. Smithb4066372010-01-03 03:28:29 +0000678def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
679 source_address=None):
Georg Brandlf78e02b2008-06-10 17:40:04 +0000680 """Connect to *address* and return the socket object.
681
682 Convenience function. Connect to *address* (a 2-tuple ``(host,
683 port)``) and return the socket object. Passing the optional
684 *timeout* parameter will set the timeout on the socket instance
685 before attempting to connect. If no *timeout* is supplied, the
686 global default timeout setting returned by :func:`getdefaulttimeout`
Gregory P. Smithb4066372010-01-03 03:28:29 +0000687 is used. If *source_address* is set it must be a tuple of (host, port)
688 for the socket to bind as a source address before making the connection.
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300689 A host of '' or port 0 tells the OS to use the default.
Guido van Rossumd8faa362007-04-27 19:54:29 +0000690 """
691
Guido van Rossumd8faa362007-04-27 19:54:29 +0000692 host, port = address
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000693 err = None
Guido van Rossumd8faa362007-04-27 19:54:29 +0000694 for res in getaddrinfo(host, port, 0, SOCK_STREAM):
695 af, socktype, proto, canonname, sa = res
696 sock = None
697 try:
698 sock = socket(af, socktype, proto)
Georg Brandlf78e02b2008-06-10 17:40:04 +0000699 if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
Guido van Rossumd8faa362007-04-27 19:54:29 +0000700 sock.settimeout(timeout)
Gregory P. Smithb4066372010-01-03 03:28:29 +0000701 if source_address:
702 sock.bind(source_address)
Guido van Rossumd8faa362007-04-27 19:54:29 +0000703 sock.connect(sa)
704 return sock
705
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000706 except error as _:
707 err = _
Guido van Rossumd8faa362007-04-27 19:54:29 +0000708 if sock is not None:
709 sock.close()
710
Antoine Pitrou4b92b5f2010-09-07 21:05:49 +0000711 if err is not None:
712 raise err
713 else:
714 raise error("getaddrinfo returns an empty list")
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700715
716def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
717 """Resolve host and port into list of address info entries.
718
719 Translate the host/port argument into a sequence of 5-tuples that contain
720 all the necessary arguments for creating a socket connected to that service.
721 host is a domain name, a string representation of an IPv4/v6 address or
722 None. port is a string service name such as 'http', a numeric port number or
723 None. By passing None as the value of host and port, you can pass NULL to
724 the underlying C API.
725
726 The family, type and proto arguments can be optionally specified in order to
727 narrow the list of addresses returned. Passing zero as a value for each of
728 these arguments selects the full range of results.
729 """
730 # We override this function since we want to translate the numeric family
731 # and socket type values to enum constants.
732 addrlist = []
733 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
734 af, socktype, proto, canonname, sa = res
735 addrlist.append((_intenum_converter(af, AddressFamily),
Ethan Furman7184bac2014-10-14 18:56:53 -0700736 _intenum_converter(socktype, SocketKind),
Eli Benderskyb2ff3cf2013-08-31 15:13:30 -0700737 proto, canonname, sa))
738 return addrlist