17db96d56Sopenharmony_ci:mod:`socket` --- Low-level networking interface
27db96d56Sopenharmony_ci================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: socket
57db96d56Sopenharmony_ci   :synopsis: Low-level networking interface.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/socket.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci--------------
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciThis module provides access to the BSD *socket* interface. It is available on
127db96d56Sopenharmony_ciall modern Unix systems, Windows, MacOS, and probably additional platforms.
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci.. note::
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci   Some behavior may be platform dependent, since calls are made to the operating
177db96d56Sopenharmony_ci   system socket APIs.
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci.. index:: pair: object; socket
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ciThe Python interface is a straightforward transliteration of the Unix system
257db96d56Sopenharmony_cicall and library interface for sockets to Python's object-oriented style: the
267db96d56Sopenharmony_ci:func:`.socket` function returns a :dfn:`socket object` whose methods implement
277db96d56Sopenharmony_cithe various socket system calls.  Parameter types are somewhat higher-level than
287db96d56Sopenharmony_ciin the C interface: as with :meth:`read` and :meth:`write` operations on Python
297db96d56Sopenharmony_cifiles, buffer allocation on receive operations is automatic, and buffer length
307db96d56Sopenharmony_ciis implicit on send operations.
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci.. seealso::
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci   Module :mod:`socketserver`
367db96d56Sopenharmony_ci      Classes that simplify writing network servers.
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   Module :mod:`ssl`
397db96d56Sopenharmony_ci      A TLS/SSL wrapper for socket objects.
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ciSocket families
437db96d56Sopenharmony_ci---------------
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ciDepending on the system and the build options, various socket families
467db96d56Sopenharmony_ciare supported by this module.
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ciThe address format required by a particular socket object is automatically
497db96d56Sopenharmony_ciselected based on the address family specified when the socket object was
507db96d56Sopenharmony_cicreated.  Socket addresses are represented as follows:
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci- The address of an :const:`AF_UNIX` socket bound to a file system node
537db96d56Sopenharmony_ci  is represented as a string, using the file system encoding and the
547db96d56Sopenharmony_ci  ``'surrogateescape'`` error handler (see :pep:`383`).  An address in
557db96d56Sopenharmony_ci  Linux's abstract namespace is returned as a :term:`bytes-like object` with
567db96d56Sopenharmony_ci  an initial null byte; note that sockets in this namespace can
577db96d56Sopenharmony_ci  communicate with normal file system sockets, so programs intended to
587db96d56Sopenharmony_ci  run on Linux may need to deal with both types of address.  A string or
597db96d56Sopenharmony_ci  bytes-like object can be used for either type of address when
607db96d56Sopenharmony_ci  passing it as an argument.
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci  .. versionchanged:: 3.3
637db96d56Sopenharmony_ci     Previously, :const:`AF_UNIX` socket paths were assumed to use UTF-8
647db96d56Sopenharmony_ci     encoding.
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci  .. versionchanged:: 3.5
677db96d56Sopenharmony_ci     Writable :term:`bytes-like object` is now accepted.
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci.. _host_port:
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci- A pair ``(host, port)`` is used for the :const:`AF_INET` address family,
727db96d56Sopenharmony_ci  where *host* is a string representing either a hostname in internet domain
737db96d56Sopenharmony_ci  notation like ``'daring.cwi.nl'`` or an IPv4 address like ``'100.50.200.5'``,
747db96d56Sopenharmony_ci  and *port* is an integer.
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci  - For IPv4 addresses, two special forms are accepted instead of a host
777db96d56Sopenharmony_ci    address: ``''`` represents :const:`INADDR_ANY`, which is used to bind to all
787db96d56Sopenharmony_ci    interfaces, and the string ``'<broadcast>'`` represents
797db96d56Sopenharmony_ci    :const:`INADDR_BROADCAST`.  This behavior is not compatible with IPv6,
807db96d56Sopenharmony_ci    therefore, you may want to avoid these if you intend to support IPv6 with your
817db96d56Sopenharmony_ci    Python programs.
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci- For :const:`AF_INET6` address family, a four-tuple ``(host, port, flowinfo,
847db96d56Sopenharmony_ci  scope_id)`` is used, where *flowinfo* and *scope_id* represent the ``sin6_flowinfo``
857db96d56Sopenharmony_ci  and ``sin6_scope_id`` members in :const:`struct sockaddr_in6` in C.  For
867db96d56Sopenharmony_ci  :mod:`socket` module methods, *flowinfo* and *scope_id* can be omitted just for
877db96d56Sopenharmony_ci  backward compatibility.  Note, however, omission of *scope_id* can cause problems
887db96d56Sopenharmony_ci  in manipulating scoped IPv6 addresses.
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci  .. versionchanged:: 3.7
917db96d56Sopenharmony_ci     For multicast addresses (with *scope_id* meaningful) *address* may not contain
927db96d56Sopenharmony_ci     ``%scope_id`` (or ``zone id``) part. This information is superfluous and may
937db96d56Sopenharmony_ci     be safely omitted (recommended).
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci- :const:`AF_NETLINK` sockets are represented as pairs ``(pid, groups)``.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci- Linux-only support for TIPC is available using the :const:`AF_TIPC`
987db96d56Sopenharmony_ci  address family.  TIPC is an open, non-IP based networked protocol designed
997db96d56Sopenharmony_ci  for use in clustered computer environments.  Addresses are represented by a
1007db96d56Sopenharmony_ci  tuple, and the fields depend on the address type. The general tuple form is
1017db96d56Sopenharmony_ci  ``(addr_type, v1, v2, v3 [, scope])``, where:
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci  - *addr_type* is one of :const:`TIPC_ADDR_NAMESEQ`, :const:`TIPC_ADDR_NAME`,
1047db96d56Sopenharmony_ci    or :const:`TIPC_ADDR_ID`.
1057db96d56Sopenharmony_ci  - *scope* is one of :const:`TIPC_ZONE_SCOPE`, :const:`TIPC_CLUSTER_SCOPE`, and
1067db96d56Sopenharmony_ci    :const:`TIPC_NODE_SCOPE`.
1077db96d56Sopenharmony_ci  - If *addr_type* is :const:`TIPC_ADDR_NAME`, then *v1* is the server type, *v2* is
1087db96d56Sopenharmony_ci    the port identifier, and *v3* should be 0.
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci    If *addr_type* is :const:`TIPC_ADDR_NAMESEQ`, then *v1* is the server type, *v2*
1117db96d56Sopenharmony_ci    is the lower port number, and *v3* is the upper port number.
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci    If *addr_type* is :const:`TIPC_ADDR_ID`, then *v1* is the node, *v2* is the
1147db96d56Sopenharmony_ci    reference, and *v3* should be set to 0.
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci- A tuple ``(interface, )`` is used for the :const:`AF_CAN` address family,
1177db96d56Sopenharmony_ci  where *interface* is a string representing a network interface name like
1187db96d56Sopenharmony_ci  ``'can0'``. The network interface name ``''`` can be used to receive packets
1197db96d56Sopenharmony_ci  from all network interfaces of this family.
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci  - :const:`CAN_ISOTP` protocol require a tuple ``(interface, rx_addr, tx_addr)``
1227db96d56Sopenharmony_ci    where both additional parameters are unsigned long integer that represent a
1237db96d56Sopenharmony_ci    CAN identifier (standard or extended).
1247db96d56Sopenharmony_ci  - :const:`CAN_J1939` protocol require a tuple ``(interface, name, pgn, addr)``
1257db96d56Sopenharmony_ci    where additional parameters are 64-bit unsigned integer representing the
1267db96d56Sopenharmony_ci    ECU name, a 32-bit unsigned integer representing the Parameter Group Number
1277db96d56Sopenharmony_ci    (PGN), and an 8-bit integer representing the address.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci- A string or a tuple ``(id, unit)`` is used for the :const:`SYSPROTO_CONTROL`
1307db96d56Sopenharmony_ci  protocol of the :const:`PF_SYSTEM` family. The string is the name of a
1317db96d56Sopenharmony_ci  kernel control using a dynamically assigned ID. The tuple can be used if ID
1327db96d56Sopenharmony_ci  and unit number of the kernel control are known or if a registered ID is
1337db96d56Sopenharmony_ci  used.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci  .. versionadded:: 3.3
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci- :const:`AF_BLUETOOTH` supports the following protocols and address
1387db96d56Sopenharmony_ci  formats:
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci  - :const:`BTPROTO_L2CAP` accepts ``(bdaddr, psm)`` where ``bdaddr`` is
1417db96d56Sopenharmony_ci    the Bluetooth address as a string and ``psm`` is an integer.
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci  - :const:`BTPROTO_RFCOMM` accepts ``(bdaddr, channel)`` where ``bdaddr``
1447db96d56Sopenharmony_ci    is the Bluetooth address as a string and ``channel`` is an integer.
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci  - :const:`BTPROTO_HCI` accepts ``(device_id,)`` where ``device_id`` is
1477db96d56Sopenharmony_ci    either an integer or a string with the Bluetooth address of the
1487db96d56Sopenharmony_ci    interface. (This depends on your OS; NetBSD and DragonFlyBSD expect
1497db96d56Sopenharmony_ci    a Bluetooth address while everything else expects an integer.)
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci    .. versionchanged:: 3.2
1527db96d56Sopenharmony_ci       NetBSD and DragonFlyBSD support added.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci  - :const:`BTPROTO_SCO` accepts ``bdaddr`` where ``bdaddr`` is a
1557db96d56Sopenharmony_ci    :class:`bytes` object containing the Bluetooth address in a
1567db96d56Sopenharmony_ci    string format. (ex. ``b'12:23:34:45:56:67'``) This protocol is not
1577db96d56Sopenharmony_ci    supported under FreeBSD.
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci- :const:`AF_ALG` is a Linux-only socket based interface to Kernel
1607db96d56Sopenharmony_ci  cryptography. An algorithm socket is configured with a tuple of two to four
1617db96d56Sopenharmony_ci  elements ``(type, name [, feat [, mask]])``, where:
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci  - *type* is the algorithm type as string, e.g. ``aead``, ``hash``,
1647db96d56Sopenharmony_ci    ``skcipher`` or ``rng``.
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci  - *name* is the algorithm name and operation mode as string, e.g.
1677db96d56Sopenharmony_ci    ``sha256``, ``hmac(sha256)``, ``cbc(aes)`` or ``drbg_nopr_ctr_aes256``.
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci  - *feat* and *mask* are unsigned 32bit integers.
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci  .. availability:: Linux >= 2.6.38.
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci     Some algorithm types require more recent Kernels.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci  .. versionadded:: 3.6
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci- :const:`AF_VSOCK` allows communication between virtual machines and
1787db96d56Sopenharmony_ci  their hosts. The sockets are represented as a ``(CID, port)`` tuple
1797db96d56Sopenharmony_ci  where the context ID or CID and port are integers.
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci  .. availability:: Linux >= 3.9
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci     See :manpage:`vsock(7)`
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci  .. versionadded:: 3.7
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci- :const:`AF_PACKET` is a low-level interface directly to network devices.
1887db96d56Sopenharmony_ci  The packets are represented by the tuple
1897db96d56Sopenharmony_ci  ``(ifname, proto[, pkttype[, hatype[, addr]]])`` where:
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci  - *ifname* - String specifying the device name.
1927db96d56Sopenharmony_ci  - *proto* - An in network-byte-order integer specifying the Ethernet
1937db96d56Sopenharmony_ci    protocol number.
1947db96d56Sopenharmony_ci  - *pkttype* - Optional integer specifying the packet type:
1957db96d56Sopenharmony_ci
1967db96d56Sopenharmony_ci    - ``PACKET_HOST`` (the default) - Packet addressed to the local host.
1977db96d56Sopenharmony_ci    - ``PACKET_BROADCAST`` - Physical-layer broadcast packet.
1987db96d56Sopenharmony_ci    - ``PACKET_MULTICAST`` - Packet sent to a physical-layer multicast address.
1997db96d56Sopenharmony_ci    - ``PACKET_OTHERHOST`` - Packet to some other host that has been caught by
2007db96d56Sopenharmony_ci      a device driver in promiscuous mode.
2017db96d56Sopenharmony_ci    - ``PACKET_OUTGOING`` - Packet originating from the local host that is
2027db96d56Sopenharmony_ci      looped back to a packet socket.
2037db96d56Sopenharmony_ci  - *hatype* - Optional integer specifying the ARP hardware address type.
2047db96d56Sopenharmony_ci  - *addr* - Optional bytes-like object specifying the hardware physical
2057db96d56Sopenharmony_ci    address, whose interpretation depends on the device.
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci   .. availability:: Linux >= 2.2.
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci- :const:`AF_QIPCRTR` is a Linux-only socket based interface for communicating
2107db96d56Sopenharmony_ci  with services running on co-processors in Qualcomm platforms. The address
2117db96d56Sopenharmony_ci  family is represented as a ``(node, port)`` tuple where the *node* and *port*
2127db96d56Sopenharmony_ci  are non-negative integers.
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci   .. availability:: Linux >= 4.7.
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci  .. versionadded:: 3.8
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci- :const:`IPPROTO_UDPLITE` is a variant of UDP which allows you to specify
2197db96d56Sopenharmony_ci  what portion of a packet is covered with the checksum. It adds two socket
2207db96d56Sopenharmony_ci  options that you can change.
2217db96d56Sopenharmony_ci  ``self.setsockopt(IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV, length)`` will
2227db96d56Sopenharmony_ci  change what portion of outgoing packets are covered by the checksum and
2237db96d56Sopenharmony_ci  ``self.setsockopt(IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV, length)`` will
2247db96d56Sopenharmony_ci  filter out packets which cover too little of their data. In both cases
2257db96d56Sopenharmony_ci  ``length`` should be in ``range(8, 2**16, 8)``.
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci  Such a socket should be constructed with
2287db96d56Sopenharmony_ci  ``socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE)`` for IPv4 or
2297db96d56Sopenharmony_ci  ``socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE)`` for IPv6.
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci  .. availability:: Linux >= 2.6.20, FreeBSD >= 10.1
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci  .. versionadded:: 3.9
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ciIf you use a hostname in the *host* portion of IPv4/v6 socket address, the
2367db96d56Sopenharmony_ciprogram may show a nondeterministic behavior, as Python uses the first address
2377db96d56Sopenharmony_cireturned from the DNS resolution.  The socket address will be resolved
2387db96d56Sopenharmony_cidifferently into an actual IPv4/v6 address, depending on the results from DNS
2397db96d56Sopenharmony_ciresolution and/or the host configuration.  For deterministic behavior use a
2407db96d56Sopenharmony_cinumeric address in *host* portion.
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ciAll errors raise exceptions.  The normal exceptions for invalid argument types
2437db96d56Sopenharmony_ciand out-of-memory conditions can be raised. Errors
2447db96d56Sopenharmony_cirelated to socket or address semantics raise :exc:`OSError` or one of its
2457db96d56Sopenharmony_cisubclasses.
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ciNon-blocking mode is supported through :meth:`~socket.setblocking`.  A
2487db96d56Sopenharmony_cigeneralization of this based on timeouts is supported through
2497db96d56Sopenharmony_ci:meth:`~socket.settimeout`.
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ciModule contents
2537db96d56Sopenharmony_ci---------------
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ciThe module :mod:`socket` exports the following elements.
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ciExceptions
2597db96d56Sopenharmony_ci^^^^^^^^^^
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci.. exception:: error
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ci   A deprecated alias of :exc:`OSError`.
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci   .. versionchanged:: 3.3
2667db96d56Sopenharmony_ci      Following :pep:`3151`, this class was made an alias of :exc:`OSError`.
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ci.. exception:: herror
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci   A subclass of :exc:`OSError`, this exception is raised for
2727db96d56Sopenharmony_ci   address-related errors, i.e. for functions that use *h_errno* in the POSIX
2737db96d56Sopenharmony_ci   C API, including :func:`gethostbyname_ex` and :func:`gethostbyaddr`.
2747db96d56Sopenharmony_ci   The accompanying value is a pair ``(h_errno, string)`` representing an
2757db96d56Sopenharmony_ci   error returned by a library call.  *h_errno* is a numeric value, while
2767db96d56Sopenharmony_ci   *string* represents the description of *h_errno*, as returned by the
2777db96d56Sopenharmony_ci   :c:func:`hstrerror` C function.
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   .. versionchanged:: 3.3
2807db96d56Sopenharmony_ci      This class was made a subclass of :exc:`OSError`.
2817db96d56Sopenharmony_ci
2827db96d56Sopenharmony_ci.. exception:: gaierror
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci   A subclass of :exc:`OSError`, this exception is raised for
2857db96d56Sopenharmony_ci   address-related errors by :func:`getaddrinfo` and :func:`getnameinfo`.
2867db96d56Sopenharmony_ci   The accompanying value is a pair ``(error, string)`` representing an error
2877db96d56Sopenharmony_ci   returned by a library call.  *string* represents the description of
2887db96d56Sopenharmony_ci   *error*, as returned by the :c:func:`gai_strerror` C function.  The
2897db96d56Sopenharmony_ci   numeric *error* value will match one of the :const:`EAI_\*` constants
2907db96d56Sopenharmony_ci   defined in this module.
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_ci   .. versionchanged:: 3.3
2937db96d56Sopenharmony_ci      This class was made a subclass of :exc:`OSError`.
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci.. exception:: timeout
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ci   A deprecated alias of :exc:`TimeoutError`.
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci   A subclass of :exc:`OSError`, this exception is raised when a timeout
3007db96d56Sopenharmony_ci   occurs on a socket which has had timeouts enabled via a prior call to
3017db96d56Sopenharmony_ci   :meth:`~socket.settimeout` (or implicitly through
3027db96d56Sopenharmony_ci   :func:`~socket.setdefaulttimeout`).  The accompanying value is a string
3037db96d56Sopenharmony_ci   whose value is currently always "timed out".
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_ci   .. versionchanged:: 3.3
3067db96d56Sopenharmony_ci      This class was made a subclass of :exc:`OSError`.
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci   .. versionchanged:: 3.10
3097db96d56Sopenharmony_ci      This class was made an alias of :exc:`TimeoutError`.
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ciConstants
3137db96d56Sopenharmony_ci^^^^^^^^^
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci   The AF_* and SOCK_* constants are now :class:`AddressFamily` and
3167db96d56Sopenharmony_ci   :class:`SocketKind` :class:`.IntEnum` collections.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci   .. versionadded:: 3.4
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci.. data:: AF_UNIX
3217db96d56Sopenharmony_ci          AF_INET
3227db96d56Sopenharmony_ci          AF_INET6
3237db96d56Sopenharmony_ci
3247db96d56Sopenharmony_ci   These constants represent the address (and protocol) families, used for the
3257db96d56Sopenharmony_ci   first argument to :func:`.socket`.  If the :const:`AF_UNIX` constant is not
3267db96d56Sopenharmony_ci   defined then this protocol is unsupported.  More constants may be available
3277db96d56Sopenharmony_ci   depending on the system.
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci.. data:: SOCK_STREAM
3317db96d56Sopenharmony_ci          SOCK_DGRAM
3327db96d56Sopenharmony_ci          SOCK_RAW
3337db96d56Sopenharmony_ci          SOCK_RDM
3347db96d56Sopenharmony_ci          SOCK_SEQPACKET
3357db96d56Sopenharmony_ci
3367db96d56Sopenharmony_ci   These constants represent the socket types, used for the second argument to
3377db96d56Sopenharmony_ci   :func:`.socket`.  More constants may be available depending on the system.
3387db96d56Sopenharmony_ci   (Only :const:`SOCK_STREAM` and :const:`SOCK_DGRAM` appear to be generally
3397db96d56Sopenharmony_ci   useful.)
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci.. data:: SOCK_CLOEXEC
3427db96d56Sopenharmony_ci          SOCK_NONBLOCK
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_ci   These two constants, if defined, can be combined with the socket types and
3457db96d56Sopenharmony_ci   allow you to set some flags atomically (thus avoiding possible race
3467db96d56Sopenharmony_ci   conditions and the need for separate calls).
3477db96d56Sopenharmony_ci
3487db96d56Sopenharmony_ci   .. seealso::
3497db96d56Sopenharmony_ci
3507db96d56Sopenharmony_ci      `Secure File Descriptor Handling <https://udrepper.livejournal.com/20407.html>`_
3517db96d56Sopenharmony_ci      for a more thorough explanation.
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.27.
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci   .. versionadded:: 3.2
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci.. data:: SO_*
3587db96d56Sopenharmony_ci          SOMAXCONN
3597db96d56Sopenharmony_ci          MSG_*
3607db96d56Sopenharmony_ci          SOL_*
3617db96d56Sopenharmony_ci          SCM_*
3627db96d56Sopenharmony_ci          IPPROTO_*
3637db96d56Sopenharmony_ci          IPPORT_*
3647db96d56Sopenharmony_ci          INADDR_*
3657db96d56Sopenharmony_ci          IP_*
3667db96d56Sopenharmony_ci          IPV6_*
3677db96d56Sopenharmony_ci          EAI_*
3687db96d56Sopenharmony_ci          AI_*
3697db96d56Sopenharmony_ci          NI_*
3707db96d56Sopenharmony_ci          TCP_*
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci   Many constants of these forms, documented in the Unix documentation on sockets
3737db96d56Sopenharmony_ci   and/or the IP protocol, are also defined in the socket module. They are
3747db96d56Sopenharmony_ci   generally used in arguments to the :meth:`setsockopt` and :meth:`getsockopt`
3757db96d56Sopenharmony_ci   methods of socket objects.  In most cases, only those symbols that are defined
3767db96d56Sopenharmony_ci   in the Unix header files are defined; for a few symbols, default values are
3777db96d56Sopenharmony_ci   provided.
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci   .. versionchanged:: 3.6
3807db96d56Sopenharmony_ci      ``SO_DOMAIN``, ``SO_PROTOCOL``, ``SO_PEERSEC``, ``SO_PASSSEC``,
3817db96d56Sopenharmony_ci      ``TCP_USER_TIMEOUT``, ``TCP_CONGESTION`` were added.
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ci   .. versionchanged:: 3.6.5
3847db96d56Sopenharmony_ci      On Windows, ``TCP_FASTOPEN``, ``TCP_KEEPCNT`` appear if run-time Windows
3857db96d56Sopenharmony_ci      supports.
3867db96d56Sopenharmony_ci
3877db96d56Sopenharmony_ci   .. versionchanged:: 3.7
3887db96d56Sopenharmony_ci      ``TCP_NOTSENT_LOWAT`` was added.
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci      On Windows, ``TCP_KEEPIDLE``, ``TCP_KEEPINTVL`` appear if run-time Windows
3917db96d56Sopenharmony_ci      supports.
3927db96d56Sopenharmony_ci
3937db96d56Sopenharmony_ci   .. versionchanged:: 3.10
3947db96d56Sopenharmony_ci      ``IP_RECVTOS`` was added.
3957db96d56Sopenharmony_ci       Added ``TCP_KEEPALIVE``. On MacOS this constant can be used in the same
3967db96d56Sopenharmony_ci       way that ``TCP_KEEPIDLE`` is used on Linux.
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ci   .. versionchanged:: 3.11
3997db96d56Sopenharmony_ci      Added ``TCP_CONNECTION_INFO``. On MacOS this constant can be used in the
4007db96d56Sopenharmony_ci      same way that ``TCP_INFO`` is used on Linux and BSD.
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci.. data:: AF_CAN
4037db96d56Sopenharmony_ci          PF_CAN
4047db96d56Sopenharmony_ci          SOL_CAN_*
4057db96d56Sopenharmony_ci          CAN_*
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   Many constants of these forms, documented in the Linux documentation, are
4087db96d56Sopenharmony_ci   also defined in the socket module.
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.25, NetBSD >= 8.
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci   .. versionadded:: 3.3
4137db96d56Sopenharmony_ci
4147db96d56Sopenharmony_ci   .. versionchanged:: 3.11
4157db96d56Sopenharmony_ci      NetBSD support was added.
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci.. data:: CAN_BCM
4187db96d56Sopenharmony_ci          CAN_BCM_*
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci   CAN_BCM, in the CAN protocol family, is the broadcast manager (BCM) protocol.
4217db96d56Sopenharmony_ci   Broadcast manager constants, documented in the Linux documentation, are also
4227db96d56Sopenharmony_ci   defined in the socket module.
4237db96d56Sopenharmony_ci
4247db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.25.
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ci   .. note::
4277db96d56Sopenharmony_ci      The :data:`CAN_BCM_CAN_FD_FRAME` flag is only available on Linux >= 4.8.
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_ci   .. versionadded:: 3.4
4307db96d56Sopenharmony_ci
4317db96d56Sopenharmony_ci.. data:: CAN_RAW_FD_FRAMES
4327db96d56Sopenharmony_ci
4337db96d56Sopenharmony_ci   Enables CAN FD support in a CAN_RAW socket. This is disabled by default.
4347db96d56Sopenharmony_ci   This allows your application to send both CAN and CAN FD frames; however,
4357db96d56Sopenharmony_ci   you must accept both CAN and CAN FD frames when reading from the socket.
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci   This constant is documented in the Linux documentation.
4387db96d56Sopenharmony_ci
4397db96d56Sopenharmony_ci   .. availability:: Linux >= 3.6.
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ci   .. versionadded:: 3.5
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci.. data:: CAN_RAW_JOIN_FILTERS
4447db96d56Sopenharmony_ci
4457db96d56Sopenharmony_ci   Joins the applied CAN filters such that only CAN frames that match all
4467db96d56Sopenharmony_ci   given CAN filters are passed to user space.
4477db96d56Sopenharmony_ci
4487db96d56Sopenharmony_ci   This constant is documented in the Linux documentation.
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci   .. availability:: Linux >= 4.1.
4517db96d56Sopenharmony_ci
4527db96d56Sopenharmony_ci   .. versionadded:: 3.9
4537db96d56Sopenharmony_ci
4547db96d56Sopenharmony_ci.. data:: CAN_ISOTP
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ci   CAN_ISOTP, in the CAN protocol family, is the ISO-TP (ISO 15765-2) protocol.
4577db96d56Sopenharmony_ci   ISO-TP constants, documented in the Linux documentation.
4587db96d56Sopenharmony_ci
4597db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.25.
4607db96d56Sopenharmony_ci
4617db96d56Sopenharmony_ci   .. versionadded:: 3.7
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci.. data:: CAN_J1939
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci   CAN_J1939, in the CAN protocol family, is the SAE J1939 protocol.
4667db96d56Sopenharmony_ci   J1939 constants, documented in the Linux documentation.
4677db96d56Sopenharmony_ci
4687db96d56Sopenharmony_ci   .. availability:: Linux >= 5.4.
4697db96d56Sopenharmony_ci
4707db96d56Sopenharmony_ci   .. versionadded:: 3.9
4717db96d56Sopenharmony_ci
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci.. data:: AF_PACKET
4747db96d56Sopenharmony_ci          PF_PACKET
4757db96d56Sopenharmony_ci          PACKET_*
4767db96d56Sopenharmony_ci
4777db96d56Sopenharmony_ci   Many constants of these forms, documented in the Linux documentation, are
4787db96d56Sopenharmony_ci   also defined in the socket module.
4797db96d56Sopenharmony_ci
4807db96d56Sopenharmony_ci   .. availability:: Linux >= 2.2.
4817db96d56Sopenharmony_ci
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci.. data:: AF_RDS
4847db96d56Sopenharmony_ci          PF_RDS
4857db96d56Sopenharmony_ci          SOL_RDS
4867db96d56Sopenharmony_ci          RDS_*
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci   Many constants of these forms, documented in the Linux documentation, are
4897db96d56Sopenharmony_ci   also defined in the socket module.
4907db96d56Sopenharmony_ci
4917db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.30.
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ci   .. versionadded:: 3.3
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci
4967db96d56Sopenharmony_ci.. data:: SIO_RCVALL
4977db96d56Sopenharmony_ci          SIO_KEEPALIVE_VALS
4987db96d56Sopenharmony_ci          SIO_LOOPBACK_FAST_PATH
4997db96d56Sopenharmony_ci          RCVALL_*
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ci   Constants for Windows' WSAIoctl(). The constants are used as arguments to the
5027db96d56Sopenharmony_ci   :meth:`~socket.socket.ioctl` method of socket objects.
5037db96d56Sopenharmony_ci
5047db96d56Sopenharmony_ci   .. versionchanged:: 3.6
5057db96d56Sopenharmony_ci      ``SIO_LOOPBACK_FAST_PATH`` was added.
5067db96d56Sopenharmony_ci
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci.. data:: TIPC_*
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_ci   TIPC related constants, matching the ones exported by the C socket API. See
5117db96d56Sopenharmony_ci   the TIPC documentation for more information.
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_ci.. data:: AF_ALG
5147db96d56Sopenharmony_ci          SOL_ALG
5157db96d56Sopenharmony_ci          ALG_*
5167db96d56Sopenharmony_ci
5177db96d56Sopenharmony_ci   Constants for Linux Kernel cryptography.
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.38.
5207db96d56Sopenharmony_ci
5217db96d56Sopenharmony_ci   .. versionadded:: 3.6
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci
5247db96d56Sopenharmony_ci.. data:: AF_VSOCK
5257db96d56Sopenharmony_ci          IOCTL_VM_SOCKETS_GET_LOCAL_CID
5267db96d56Sopenharmony_ci          VMADDR*
5277db96d56Sopenharmony_ci          SO_VM*
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ci   Constants for Linux host/guest communication.
5307db96d56Sopenharmony_ci
5317db96d56Sopenharmony_ci   .. availability:: Linux >= 4.8.
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci   .. versionadded:: 3.7
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci.. data:: AF_LINK
5367db96d56Sopenharmony_ci
5377db96d56Sopenharmony_ci  .. availability:: BSD, macOS.
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ci  .. versionadded:: 3.4
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci.. data:: has_ipv6
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci   This constant contains a boolean value which indicates if IPv6 is supported on
5447db96d56Sopenharmony_ci   this platform.
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ci.. data:: BDADDR_ANY
5477db96d56Sopenharmony_ci          BDADDR_LOCAL
5487db96d56Sopenharmony_ci
5497db96d56Sopenharmony_ci   These are string constants containing Bluetooth addresses with special
5507db96d56Sopenharmony_ci   meanings. For example, :const:`BDADDR_ANY` can be used to indicate
5517db96d56Sopenharmony_ci   any address when specifying the binding socket with
5527db96d56Sopenharmony_ci   :const:`BTPROTO_RFCOMM`.
5537db96d56Sopenharmony_ci
5547db96d56Sopenharmony_ci.. data:: HCI_FILTER
5557db96d56Sopenharmony_ci          HCI_TIME_STAMP
5567db96d56Sopenharmony_ci          HCI_DATA_DIR
5577db96d56Sopenharmony_ci
5587db96d56Sopenharmony_ci   For use with :const:`BTPROTO_HCI`. :const:`HCI_FILTER` is not
5597db96d56Sopenharmony_ci   available for NetBSD or DragonFlyBSD. :const:`HCI_TIME_STAMP` and
5607db96d56Sopenharmony_ci   :const:`HCI_DATA_DIR` are not available for FreeBSD, NetBSD, or
5617db96d56Sopenharmony_ci   DragonFlyBSD.
5627db96d56Sopenharmony_ci
5637db96d56Sopenharmony_ci.. data:: AF_QIPCRTR
5647db96d56Sopenharmony_ci
5657db96d56Sopenharmony_ci   Constant for Qualcomm's IPC router protocol, used to communicate with
5667db96d56Sopenharmony_ci   service providing remote processors.
5677db96d56Sopenharmony_ci
5687db96d56Sopenharmony_ci   .. availability:: Linux >= 4.7.
5697db96d56Sopenharmony_ci
5707db96d56Sopenharmony_ci.. data:: SCM_CREDS2
5717db96d56Sopenharmony_ci          LOCAL_CREDS
5727db96d56Sopenharmony_ci          LOCAL_CREDS_PERSISTENT
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci   LOCAL_CREDS and LOCAL_CREDS_PERSISTENT can be used
5757db96d56Sopenharmony_ci   with SOCK_DGRAM, SOCK_STREAM sockets, equivalent to
5767db96d56Sopenharmony_ci   Linux/DragonFlyBSD SO_PASSCRED, while LOCAL_CREDS
5777db96d56Sopenharmony_ci   sends the credentials at first read, LOCAL_CREDS_PERSISTENT
5787db96d56Sopenharmony_ci   sends for each read, SCM_CREDS2 must be then used for
5797db96d56Sopenharmony_ci   the latter for the message type.
5807db96d56Sopenharmony_ci
5817db96d56Sopenharmony_ci   .. versionadded:: 3.11
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ci   .. availability:: FreeBSD.
5847db96d56Sopenharmony_ci
5857db96d56Sopenharmony_ci.. data:: SO_INCOMING_CPU
5867db96d56Sopenharmony_ci
5877db96d56Sopenharmony_ci   Constant to optimize CPU locality, to be used in conjunction with
5887db96d56Sopenharmony_ci   :data:`SO_REUSEPORT`.
5897db96d56Sopenharmony_ci
5907db96d56Sopenharmony_ci  .. versionadded:: 3.11
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ci  .. availability:: Linux >= 3.9
5937db96d56Sopenharmony_ci
5947db96d56Sopenharmony_ciFunctions
5957db96d56Sopenharmony_ci^^^^^^^^^
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_ciCreating sockets
5987db96d56Sopenharmony_ci''''''''''''''''
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ciThe following functions all create :ref:`socket objects <socket-objects>`.
6017db96d56Sopenharmony_ci
6027db96d56Sopenharmony_ci
6037db96d56Sopenharmony_ci.. class:: socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci   Create a new socket using the given address family, socket type and protocol
6067db96d56Sopenharmony_ci   number.  The address family should be :const:`AF_INET` (the default),
6077db96d56Sopenharmony_ci   :const:`AF_INET6`, :const:`AF_UNIX`, :const:`AF_CAN`, :const:`AF_PACKET`,
6087db96d56Sopenharmony_ci   or :const:`AF_RDS`. The socket type should be :const:`SOCK_STREAM` (the
6097db96d56Sopenharmony_ci   default), :const:`SOCK_DGRAM`, :const:`SOCK_RAW` or perhaps one of the other
6107db96d56Sopenharmony_ci   ``SOCK_`` constants. The protocol number is usually zero and may be omitted
6117db96d56Sopenharmony_ci   or in the case where the address family is :const:`AF_CAN` the protocol
6127db96d56Sopenharmony_ci   should be one of :const:`CAN_RAW`, :const:`CAN_BCM`, :const:`CAN_ISOTP` or
6137db96d56Sopenharmony_ci   :const:`CAN_J1939`.
6147db96d56Sopenharmony_ci
6157db96d56Sopenharmony_ci   If *fileno* is specified, the values for *family*, *type*, and *proto* are
6167db96d56Sopenharmony_ci   auto-detected from the specified file descriptor.  Auto-detection can be
6177db96d56Sopenharmony_ci   overruled by calling the function with explicit *family*, *type*, or *proto*
6187db96d56Sopenharmony_ci   arguments.  This only affects how Python represents e.g. the return value
6197db96d56Sopenharmony_ci   of :meth:`socket.getpeername` but not the actual OS resource.  Unlike
6207db96d56Sopenharmony_ci   :func:`socket.fromfd`, *fileno* will return the same socket and not a
6217db96d56Sopenharmony_ci   duplicate. This may help close a detached socket using
6227db96d56Sopenharmony_ci   :meth:`socket.close()`.
6237db96d56Sopenharmony_ci
6247db96d56Sopenharmony_ci   The newly created socket is :ref:`non-inheritable <fd_inheritance>`.
6257db96d56Sopenharmony_ci
6267db96d56Sopenharmony_ci   .. audit-event:: socket.__new__ self,family,type,protocol socket.socket
6277db96d56Sopenharmony_ci
6287db96d56Sopenharmony_ci   .. versionchanged:: 3.3
6297db96d56Sopenharmony_ci      The AF_CAN family was added.
6307db96d56Sopenharmony_ci      The AF_RDS family was added.
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci   .. versionchanged:: 3.4
6337db96d56Sopenharmony_ci       The CAN_BCM protocol was added.
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci   .. versionchanged:: 3.4
6367db96d56Sopenharmony_ci      The returned socket is now non-inheritable.
6377db96d56Sopenharmony_ci
6387db96d56Sopenharmony_ci   .. versionchanged:: 3.7
6397db96d56Sopenharmony_ci       The CAN_ISOTP protocol was added.
6407db96d56Sopenharmony_ci
6417db96d56Sopenharmony_ci   .. versionchanged:: 3.7
6427db96d56Sopenharmony_ci      When :const:`SOCK_NONBLOCK` or :const:`SOCK_CLOEXEC`
6437db96d56Sopenharmony_ci      bit flags are applied to *type* they are cleared, and
6447db96d56Sopenharmony_ci      :attr:`socket.type` will not reflect them.  They are still passed
6457db96d56Sopenharmony_ci      to the underlying system ``socket()`` call.  Therefore,
6467db96d56Sopenharmony_ci
6477db96d56Sopenharmony_ci      ::
6487db96d56Sopenharmony_ci
6497db96d56Sopenharmony_ci          sock = socket.socket(
6507db96d56Sopenharmony_ci              socket.AF_INET,
6517db96d56Sopenharmony_ci              socket.SOCK_STREAM | socket.SOCK_NONBLOCK)
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci      will still create a non-blocking socket on OSes that support
6547db96d56Sopenharmony_ci      ``SOCK_NONBLOCK``, but ``sock.type`` will be set to
6557db96d56Sopenharmony_ci      ``socket.SOCK_STREAM``.
6567db96d56Sopenharmony_ci
6577db96d56Sopenharmony_ci   .. versionchanged:: 3.9
6587db96d56Sopenharmony_ci       The CAN_J1939 protocol was added.
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ci   .. versionchanged:: 3.10
6617db96d56Sopenharmony_ci       The IPPROTO_MPTCP protocol was added.
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_ci.. function:: socketpair([family[, type[, proto]]])
6647db96d56Sopenharmony_ci
6657db96d56Sopenharmony_ci   Build a pair of connected socket objects using the given address family, socket
6667db96d56Sopenharmony_ci   type, and protocol number.  Address family, socket type, and protocol number are
6677db96d56Sopenharmony_ci   as for the :func:`.socket` function above. The default family is :const:`AF_UNIX`
6687db96d56Sopenharmony_ci   if defined on the platform; otherwise, the default is :const:`AF_INET`.
6697db96d56Sopenharmony_ci
6707db96d56Sopenharmony_ci   The newly created sockets are :ref:`non-inheritable <fd_inheritance>`.
6717db96d56Sopenharmony_ci
6727db96d56Sopenharmony_ci   .. versionchanged:: 3.2
6737db96d56Sopenharmony_ci      The returned socket objects now support the whole socket API, rather
6747db96d56Sopenharmony_ci      than a subset.
6757db96d56Sopenharmony_ci
6767db96d56Sopenharmony_ci   .. versionchanged:: 3.4
6777db96d56Sopenharmony_ci      The returned sockets are now non-inheritable.
6787db96d56Sopenharmony_ci
6797db96d56Sopenharmony_ci   .. versionchanged:: 3.5
6807db96d56Sopenharmony_ci      Windows support added.
6817db96d56Sopenharmony_ci
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci.. function:: create_connection(address, timeout=GLOBAL_DEFAULT, source_address=None, *, all_errors=False)
6847db96d56Sopenharmony_ci
6857db96d56Sopenharmony_ci   Connect to a TCP service listening on the internet *address* (a 2-tuple
6867db96d56Sopenharmony_ci   ``(host, port)``), and return the socket object.  This is a higher-level
6877db96d56Sopenharmony_ci   function than :meth:`socket.connect`: if *host* is a non-numeric hostname,
6887db96d56Sopenharmony_ci   it will try to resolve it for both :data:`AF_INET` and :data:`AF_INET6`,
6897db96d56Sopenharmony_ci   and then try to connect to all possible addresses in turn until a
6907db96d56Sopenharmony_ci   connection succeeds.  This makes it easy to write clients that are
6917db96d56Sopenharmony_ci   compatible to both IPv4 and IPv6.
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci   Passing the optional *timeout* parameter will set the timeout on the
6947db96d56Sopenharmony_ci   socket instance before attempting to connect.  If no *timeout* is
6957db96d56Sopenharmony_ci   supplied, the global default timeout setting returned by
6967db96d56Sopenharmony_ci   :func:`getdefaulttimeout` is used.
6977db96d56Sopenharmony_ci
6987db96d56Sopenharmony_ci   If supplied, *source_address* must be a 2-tuple ``(host, port)`` for the
6997db96d56Sopenharmony_ci   socket to bind to as its source address before connecting.  If host or port
7007db96d56Sopenharmony_ci   are '' or 0 respectively the OS default behavior will be used.
7017db96d56Sopenharmony_ci
7027db96d56Sopenharmony_ci   When a connection cannot be created, an exception is raised. By default,
7037db96d56Sopenharmony_ci   it is the exception from the last address in the list. If *all_errors*
7047db96d56Sopenharmony_ci   is ``True``, it is an :exc:`ExceptionGroup` containing the errors of all
7057db96d56Sopenharmony_ci   attempts.
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci   .. versionchanged:: 3.2
7087db96d56Sopenharmony_ci      *source_address* was added.
7097db96d56Sopenharmony_ci
7107db96d56Sopenharmony_ci   .. versionchanged:: 3.11
7117db96d56Sopenharmony_ci      *all_errors* was added.
7127db96d56Sopenharmony_ci
7137db96d56Sopenharmony_ci
7147db96d56Sopenharmony_ci.. function:: create_server(address, *, family=AF_INET, backlog=None, reuse_port=False, dualstack_ipv6=False)
7157db96d56Sopenharmony_ci
7167db96d56Sopenharmony_ci   Convenience function which creates a TCP socket bound to *address* (a 2-tuple
7177db96d56Sopenharmony_ci   ``(host, port)``) and return the socket object.
7187db96d56Sopenharmony_ci
7197db96d56Sopenharmony_ci   *family* should be either :data:`AF_INET` or :data:`AF_INET6`.
7207db96d56Sopenharmony_ci   *backlog* is the queue size passed to :meth:`socket.listen`; if not specified
7217db96d56Sopenharmony_ci   , a default reasonable value is chosen.
7227db96d56Sopenharmony_ci   *reuse_port* dictates whether to set the :data:`SO_REUSEPORT` socket option.
7237db96d56Sopenharmony_ci
7247db96d56Sopenharmony_ci   If *dualstack_ipv6* is true and the platform supports it the socket will
7257db96d56Sopenharmony_ci   be able to accept both IPv4 and IPv6 connections, else it will raise
7267db96d56Sopenharmony_ci   :exc:`ValueError`. Most POSIX platforms and Windows are supposed to support
7277db96d56Sopenharmony_ci   this functionality.
7287db96d56Sopenharmony_ci   When this functionality is enabled the address returned by
7297db96d56Sopenharmony_ci   :meth:`socket.getpeername` when an IPv4 connection occurs will be an IPv6
7307db96d56Sopenharmony_ci   address represented as an IPv4-mapped IPv6 address.
7317db96d56Sopenharmony_ci   If *dualstack_ipv6* is false it will explicitly disable this functionality
7327db96d56Sopenharmony_ci   on platforms that enable it by default (e.g. Linux).
7337db96d56Sopenharmony_ci   This parameter can be used in conjunction with :func:`has_dualstack_ipv6`:
7347db96d56Sopenharmony_ci
7357db96d56Sopenharmony_ci   ::
7367db96d56Sopenharmony_ci
7377db96d56Sopenharmony_ci     import socket
7387db96d56Sopenharmony_ci
7397db96d56Sopenharmony_ci     addr = ("", 8080)  # all interfaces, port 8080
7407db96d56Sopenharmony_ci     if socket.has_dualstack_ipv6():
7417db96d56Sopenharmony_ci         s = socket.create_server(addr, family=socket.AF_INET6, dualstack_ipv6=True)
7427db96d56Sopenharmony_ci     else:
7437db96d56Sopenharmony_ci         s = socket.create_server(addr)
7447db96d56Sopenharmony_ci
7457db96d56Sopenharmony_ci   .. note::
7467db96d56Sopenharmony_ci    On POSIX platforms the :data:`SO_REUSEADDR` socket option is set in order to
7477db96d56Sopenharmony_ci    immediately reuse previous sockets which were bound on the same *address*
7487db96d56Sopenharmony_ci    and remained in TIME_WAIT state.
7497db96d56Sopenharmony_ci
7507db96d56Sopenharmony_ci   .. versionadded:: 3.8
7517db96d56Sopenharmony_ci
7527db96d56Sopenharmony_ci.. function:: has_dualstack_ipv6()
7537db96d56Sopenharmony_ci
7547db96d56Sopenharmony_ci   Return ``True`` if the platform supports creating a TCP socket which can
7557db96d56Sopenharmony_ci   handle both IPv4 and IPv6 connections.
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci   .. versionadded:: 3.8
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ci.. function:: fromfd(fd, family, type, proto=0)
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci   Duplicate the file descriptor *fd* (an integer as returned by a file object's
7627db96d56Sopenharmony_ci   :meth:`fileno` method) and build a socket object from the result.  Address
7637db96d56Sopenharmony_ci   family, socket type and protocol number are as for the :func:`.socket` function
7647db96d56Sopenharmony_ci   above. The file descriptor should refer to a socket, but this is not checked ---
7657db96d56Sopenharmony_ci   subsequent operations on the object may fail if the file descriptor is invalid.
7667db96d56Sopenharmony_ci   This function is rarely needed, but can be used to get or set socket options on
7677db96d56Sopenharmony_ci   a socket passed to a program as standard input or output (such as a server
7687db96d56Sopenharmony_ci   started by the Unix inet daemon).  The socket is assumed to be in blocking mode.
7697db96d56Sopenharmony_ci
7707db96d56Sopenharmony_ci   The newly created socket is :ref:`non-inheritable <fd_inheritance>`.
7717db96d56Sopenharmony_ci
7727db96d56Sopenharmony_ci   .. versionchanged:: 3.4
7737db96d56Sopenharmony_ci      The returned socket is now non-inheritable.
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ci
7767db96d56Sopenharmony_ci.. function:: fromshare(data)
7777db96d56Sopenharmony_ci
7787db96d56Sopenharmony_ci   Instantiate a socket from data obtained from the :meth:`socket.share`
7797db96d56Sopenharmony_ci   method.  The socket is assumed to be in blocking mode.
7807db96d56Sopenharmony_ci
7817db96d56Sopenharmony_ci   .. availability:: Windows.
7827db96d56Sopenharmony_ci
7837db96d56Sopenharmony_ci   .. versionadded:: 3.3
7847db96d56Sopenharmony_ci
7857db96d56Sopenharmony_ci
7867db96d56Sopenharmony_ci.. data:: SocketType
7877db96d56Sopenharmony_ci
7887db96d56Sopenharmony_ci   This is a Python type object that represents the socket object type. It is the
7897db96d56Sopenharmony_ci   same as ``type(socket(...))``.
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ci
7927db96d56Sopenharmony_ciOther functions
7937db96d56Sopenharmony_ci'''''''''''''''
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ciThe :mod:`socket` module also offers various network-related services:
7967db96d56Sopenharmony_ci
7977db96d56Sopenharmony_ci
7987db96d56Sopenharmony_ci.. function:: close(fd)
7997db96d56Sopenharmony_ci
8007db96d56Sopenharmony_ci   Close a socket file descriptor. This is like :func:`os.close`, but for
8017db96d56Sopenharmony_ci   sockets. On some platforms (most noticeable Windows) :func:`os.close`
8027db96d56Sopenharmony_ci   does not work for socket file descriptors.
8037db96d56Sopenharmony_ci
8047db96d56Sopenharmony_ci   .. versionadded:: 3.7
8057db96d56Sopenharmony_ci
8067db96d56Sopenharmony_ci.. function:: getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)
8077db96d56Sopenharmony_ci
8087db96d56Sopenharmony_ci   Translate the *host*/*port* argument into a sequence of 5-tuples that contain
8097db96d56Sopenharmony_ci   all the necessary arguments for creating a socket connected to that service.
8107db96d56Sopenharmony_ci   *host* is a domain name, a string representation of an IPv4/v6 address
8117db96d56Sopenharmony_ci   or ``None``. *port* is a string service name such as ``'http'``, a numeric
8127db96d56Sopenharmony_ci   port number or ``None``.  By passing ``None`` as the value of *host*
8137db96d56Sopenharmony_ci   and *port*, you can pass ``NULL`` to the underlying C API.
8147db96d56Sopenharmony_ci
8157db96d56Sopenharmony_ci   The *family*, *type* and *proto* arguments can be optionally specified
8167db96d56Sopenharmony_ci   in order to narrow the list of addresses returned.  Passing zero as a
8177db96d56Sopenharmony_ci   value for each of these arguments selects the full range of results.
8187db96d56Sopenharmony_ci   The *flags* argument can be one or several of the ``AI_*`` constants,
8197db96d56Sopenharmony_ci   and will influence how results are computed and returned.
8207db96d56Sopenharmony_ci   For example, :const:`AI_NUMERICHOST` will disable domain name resolution
8217db96d56Sopenharmony_ci   and will raise an error if *host* is a domain name.
8227db96d56Sopenharmony_ci
8237db96d56Sopenharmony_ci   The function returns a list of 5-tuples with the following structure:
8247db96d56Sopenharmony_ci
8257db96d56Sopenharmony_ci   ``(family, type, proto, canonname, sockaddr)``
8267db96d56Sopenharmony_ci
8277db96d56Sopenharmony_ci   In these tuples, *family*, *type*, *proto* are all integers and are
8287db96d56Sopenharmony_ci   meant to be passed to the :func:`.socket` function.  *canonname* will be
8297db96d56Sopenharmony_ci   a string representing the canonical name of the *host* if
8307db96d56Sopenharmony_ci   :const:`AI_CANONNAME` is part of the *flags* argument; else *canonname*
8317db96d56Sopenharmony_ci   will be empty.  *sockaddr* is a tuple describing a socket address, whose
8327db96d56Sopenharmony_ci   format depends on the returned *family* (a ``(address, port)`` 2-tuple for
8337db96d56Sopenharmony_ci   :const:`AF_INET`, a ``(address, port, flowinfo, scope_id)`` 4-tuple for
8347db96d56Sopenharmony_ci   :const:`AF_INET6`), and is meant to be passed to the :meth:`socket.connect`
8357db96d56Sopenharmony_ci   method.
8367db96d56Sopenharmony_ci
8377db96d56Sopenharmony_ci   .. audit-event:: socket.getaddrinfo host,port,family,type,protocol socket.getaddrinfo
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ci   The following example fetches address information for a hypothetical TCP
8407db96d56Sopenharmony_ci   connection to ``example.org`` on port 80 (results may differ on your
8417db96d56Sopenharmony_ci   system if IPv6 isn't enabled)::
8427db96d56Sopenharmony_ci
8437db96d56Sopenharmony_ci      >>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)
8447db96d56Sopenharmony_ci      [(socket.AF_INET6, socket.SOCK_STREAM,
8457db96d56Sopenharmony_ci       6, '', ('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
8467db96d56Sopenharmony_ci       (socket.AF_INET, socket.SOCK_STREAM,
8477db96d56Sopenharmony_ci       6, '', ('93.184.216.34', 80))]
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_ci   .. versionchanged:: 3.2
8507db96d56Sopenharmony_ci      parameters can now be passed using keyword arguments.
8517db96d56Sopenharmony_ci
8527db96d56Sopenharmony_ci   .. versionchanged:: 3.7
8537db96d56Sopenharmony_ci      for IPv6 multicast addresses, string representing an address will not
8547db96d56Sopenharmony_ci      contain ``%scope_id`` part.
8557db96d56Sopenharmony_ci
8567db96d56Sopenharmony_ci.. function:: getfqdn([name])
8577db96d56Sopenharmony_ci
8587db96d56Sopenharmony_ci   Return a fully qualified domain name for *name*. If *name* is omitted or empty,
8597db96d56Sopenharmony_ci   it is interpreted as the local host.  To find the fully qualified name, the
8607db96d56Sopenharmony_ci   hostname returned by :func:`gethostbyaddr` is checked, followed by aliases for the
8617db96d56Sopenharmony_ci   host, if available.  The first name which includes a period is selected.  In
8627db96d56Sopenharmony_ci   case no fully qualified domain name is available and *name* was provided,
8637db96d56Sopenharmony_ci   it is returned unchanged.  If *name* was empty or equal to ``'0.0.0.0'``,
8647db96d56Sopenharmony_ci   the hostname from :func:`gethostname` is returned.
8657db96d56Sopenharmony_ci
8667db96d56Sopenharmony_ci
8677db96d56Sopenharmony_ci.. function:: gethostbyname(hostname)
8687db96d56Sopenharmony_ci
8697db96d56Sopenharmony_ci   Translate a host name to IPv4 address format.  The IPv4 address is returned as a
8707db96d56Sopenharmony_ci   string, such as  ``'100.50.200.5'``.  If the host name is an IPv4 address itself
8717db96d56Sopenharmony_ci   it is returned unchanged.  See :func:`gethostbyname_ex` for a more complete
8727db96d56Sopenharmony_ci   interface. :func:`gethostbyname` does not support IPv6 name resolution, and
8737db96d56Sopenharmony_ci   :func:`getaddrinfo` should be used instead for IPv4/v6 dual stack support.
8747db96d56Sopenharmony_ci
8757db96d56Sopenharmony_ci   .. audit-event:: socket.gethostbyname hostname socket.gethostbyname
8767db96d56Sopenharmony_ci
8777db96d56Sopenharmony_ci   .. availability:: not WASI.
8787db96d56Sopenharmony_ci
8797db96d56Sopenharmony_ci
8807db96d56Sopenharmony_ci.. function:: gethostbyname_ex(hostname)
8817db96d56Sopenharmony_ci
8827db96d56Sopenharmony_ci   Translate a host name to IPv4 address format, extended interface. Return a
8837db96d56Sopenharmony_ci   triple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the host's
8847db96d56Sopenharmony_ci   primary host name, *aliaslist* is a (possibly
8857db96d56Sopenharmony_ci   empty) list of alternative host names for the same address, and *ipaddrlist* is
8867db96d56Sopenharmony_ci   a list of IPv4 addresses for the same interface on the same host (often but not
8877db96d56Sopenharmony_ci   always a single address). :func:`gethostbyname_ex` does not support IPv6 name
8887db96d56Sopenharmony_ci   resolution, and :func:`getaddrinfo` should be used instead for IPv4/v6 dual
8897db96d56Sopenharmony_ci   stack support.
8907db96d56Sopenharmony_ci
8917db96d56Sopenharmony_ci   .. audit-event:: socket.gethostbyname hostname socket.gethostbyname_ex
8927db96d56Sopenharmony_ci
8937db96d56Sopenharmony_ci   .. availability:: not WASI.
8947db96d56Sopenharmony_ci
8957db96d56Sopenharmony_ci
8967db96d56Sopenharmony_ci.. function:: gethostname()
8977db96d56Sopenharmony_ci
8987db96d56Sopenharmony_ci   Return a string containing the hostname of the machine where  the Python
8997db96d56Sopenharmony_ci   interpreter is currently executing.
9007db96d56Sopenharmony_ci
9017db96d56Sopenharmony_ci   .. audit-event:: socket.gethostname "" socket.gethostname
9027db96d56Sopenharmony_ci
9037db96d56Sopenharmony_ci   Note: :func:`gethostname` doesn't always return the fully qualified domain
9047db96d56Sopenharmony_ci   name; use :func:`getfqdn` for that.
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci   .. availability:: not WASI.
9077db96d56Sopenharmony_ci
9087db96d56Sopenharmony_ci
9097db96d56Sopenharmony_ci.. function:: gethostbyaddr(ip_address)
9107db96d56Sopenharmony_ci
9117db96d56Sopenharmony_ci   Return a triple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the
9127db96d56Sopenharmony_ci   primary host name responding to the given *ip_address*, *aliaslist* is a
9137db96d56Sopenharmony_ci   (possibly empty) list of alternative host names for the same address, and
9147db96d56Sopenharmony_ci   *ipaddrlist* is a list of IPv4/v6 addresses for the same interface on the same
9157db96d56Sopenharmony_ci   host (most likely containing only a single address). To find the fully qualified
9167db96d56Sopenharmony_ci   domain name, use the function :func:`getfqdn`. :func:`gethostbyaddr` supports
9177db96d56Sopenharmony_ci   both IPv4 and IPv6.
9187db96d56Sopenharmony_ci
9197db96d56Sopenharmony_ci   .. audit-event:: socket.gethostbyaddr ip_address socket.gethostbyaddr
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_ci   .. availability:: not WASI.
9227db96d56Sopenharmony_ci
9237db96d56Sopenharmony_ci
9247db96d56Sopenharmony_ci.. function:: getnameinfo(sockaddr, flags)
9257db96d56Sopenharmony_ci
9267db96d56Sopenharmony_ci   Translate a socket address *sockaddr* into a 2-tuple ``(host, port)``. Depending
9277db96d56Sopenharmony_ci   on the settings of *flags*, the result can contain a fully qualified domain name
9287db96d56Sopenharmony_ci   or numeric address representation in *host*.  Similarly, *port* can contain a
9297db96d56Sopenharmony_ci   string port name or a numeric port number.
9307db96d56Sopenharmony_ci
9317db96d56Sopenharmony_ci   For IPv6 addresses, ``%scope_id`` is appended to the host part if *sockaddr*
9327db96d56Sopenharmony_ci   contains meaningful *scope_id*. Usually this happens for multicast addresses.
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ci   For more information about *flags* you can consult :manpage:`getnameinfo(3)`.
9357db96d56Sopenharmony_ci
9367db96d56Sopenharmony_ci   .. audit-event:: socket.getnameinfo sockaddr socket.getnameinfo
9377db96d56Sopenharmony_ci
9387db96d56Sopenharmony_ci   .. availability:: not WASI.
9397db96d56Sopenharmony_ci
9407db96d56Sopenharmony_ci
9417db96d56Sopenharmony_ci.. function:: getprotobyname(protocolname)
9427db96d56Sopenharmony_ci
9437db96d56Sopenharmony_ci   Translate an internet protocol name (for example, ``'icmp'``) to a constant
9447db96d56Sopenharmony_ci   suitable for passing as the (optional) third argument to the :func:`.socket`
9457db96d56Sopenharmony_ci   function.  This is usually only needed for sockets opened in "raw" mode
9467db96d56Sopenharmony_ci   (:const:`SOCK_RAW`); for the normal socket modes, the correct protocol is chosen
9477db96d56Sopenharmony_ci   automatically if the protocol is omitted or zero.
9487db96d56Sopenharmony_ci
9497db96d56Sopenharmony_ci   .. availability:: not WASI.
9507db96d56Sopenharmony_ci
9517db96d56Sopenharmony_ci
9527db96d56Sopenharmony_ci.. function:: getservbyname(servicename[, protocolname])
9537db96d56Sopenharmony_ci
9547db96d56Sopenharmony_ci   Translate an internet service name and protocol name to a port number for that
9557db96d56Sopenharmony_ci   service.  The optional protocol name, if given, should be ``'tcp'`` or
9567db96d56Sopenharmony_ci   ``'udp'``, otherwise any protocol will match.
9577db96d56Sopenharmony_ci
9587db96d56Sopenharmony_ci   .. audit-event:: socket.getservbyname servicename,protocolname socket.getservbyname
9597db96d56Sopenharmony_ci
9607db96d56Sopenharmony_ci   .. availability:: not WASI.
9617db96d56Sopenharmony_ci
9627db96d56Sopenharmony_ci
9637db96d56Sopenharmony_ci.. function:: getservbyport(port[, protocolname])
9647db96d56Sopenharmony_ci
9657db96d56Sopenharmony_ci   Translate an internet port number and protocol name to a service name for that
9667db96d56Sopenharmony_ci   service.  The optional protocol name, if given, should be ``'tcp'`` or
9677db96d56Sopenharmony_ci   ``'udp'``, otherwise any protocol will match.
9687db96d56Sopenharmony_ci
9697db96d56Sopenharmony_ci   .. audit-event:: socket.getservbyport port,protocolname socket.getservbyport
9707db96d56Sopenharmony_ci
9717db96d56Sopenharmony_ci   .. availability:: not WASI.
9727db96d56Sopenharmony_ci
9737db96d56Sopenharmony_ci
9747db96d56Sopenharmony_ci.. function:: ntohl(x)
9757db96d56Sopenharmony_ci
9767db96d56Sopenharmony_ci   Convert 32-bit positive integers from network to host byte order.  On machines
9777db96d56Sopenharmony_ci   where the host byte order is the same as network byte order, this is a no-op;
9787db96d56Sopenharmony_ci   otherwise, it performs a 4-byte swap operation.
9797db96d56Sopenharmony_ci
9807db96d56Sopenharmony_ci
9817db96d56Sopenharmony_ci.. function:: ntohs(x)
9827db96d56Sopenharmony_ci
9837db96d56Sopenharmony_ci   Convert 16-bit positive integers from network to host byte order.  On machines
9847db96d56Sopenharmony_ci   where the host byte order is the same as network byte order, this is a no-op;
9857db96d56Sopenharmony_ci   otherwise, it performs a 2-byte swap operation.
9867db96d56Sopenharmony_ci
9877db96d56Sopenharmony_ci   .. versionchanged:: 3.10
9887db96d56Sopenharmony_ci      Raises :exc:`OverflowError` if *x* does not fit in a 16-bit unsigned
9897db96d56Sopenharmony_ci      integer.
9907db96d56Sopenharmony_ci
9917db96d56Sopenharmony_ci
9927db96d56Sopenharmony_ci.. function:: htonl(x)
9937db96d56Sopenharmony_ci
9947db96d56Sopenharmony_ci   Convert 32-bit positive integers from host to network byte order.  On machines
9957db96d56Sopenharmony_ci   where the host byte order is the same as network byte order, this is a no-op;
9967db96d56Sopenharmony_ci   otherwise, it performs a 4-byte swap operation.
9977db96d56Sopenharmony_ci
9987db96d56Sopenharmony_ci
9997db96d56Sopenharmony_ci.. function:: htons(x)
10007db96d56Sopenharmony_ci
10017db96d56Sopenharmony_ci   Convert 16-bit positive integers from host to network byte order.  On machines
10027db96d56Sopenharmony_ci   where the host byte order is the same as network byte order, this is a no-op;
10037db96d56Sopenharmony_ci   otherwise, it performs a 2-byte swap operation.
10047db96d56Sopenharmony_ci
10057db96d56Sopenharmony_ci   .. versionchanged:: 3.10
10067db96d56Sopenharmony_ci      Raises :exc:`OverflowError` if *x* does not fit in a 16-bit unsigned
10077db96d56Sopenharmony_ci      integer.
10087db96d56Sopenharmony_ci
10097db96d56Sopenharmony_ci
10107db96d56Sopenharmony_ci.. function:: inet_aton(ip_string)
10117db96d56Sopenharmony_ci
10127db96d56Sopenharmony_ci   Convert an IPv4 address from dotted-quad string format (for example,
10137db96d56Sopenharmony_ci   '123.45.67.89') to 32-bit packed binary format, as a bytes object four characters in
10147db96d56Sopenharmony_ci   length.  This is useful when conversing with a program that uses the standard C
10157db96d56Sopenharmony_ci   library and needs objects of type :c:struct:`in_addr`, which is the C type
10167db96d56Sopenharmony_ci   for the 32-bit packed binary this function returns.
10177db96d56Sopenharmony_ci
10187db96d56Sopenharmony_ci   :func:`inet_aton` also accepts strings with less than three dots; see the
10197db96d56Sopenharmony_ci   Unix manual page :manpage:`inet(3)` for details.
10207db96d56Sopenharmony_ci
10217db96d56Sopenharmony_ci   If the IPv4 address string passed to this function is invalid,
10227db96d56Sopenharmony_ci   :exc:`OSError` will be raised. Note that exactly what is valid depends on
10237db96d56Sopenharmony_ci   the underlying C implementation of :c:func:`inet_aton`.
10247db96d56Sopenharmony_ci
10257db96d56Sopenharmony_ci   :func:`inet_aton` does not support IPv6, and :func:`inet_pton` should be used
10267db96d56Sopenharmony_ci   instead for IPv4/v6 dual stack support.
10277db96d56Sopenharmony_ci
10287db96d56Sopenharmony_ci
10297db96d56Sopenharmony_ci.. function:: inet_ntoa(packed_ip)
10307db96d56Sopenharmony_ci
10317db96d56Sopenharmony_ci   Convert a 32-bit packed IPv4 address (a :term:`bytes-like object` four
10327db96d56Sopenharmony_ci   bytes in length) to its standard dotted-quad string representation (for example,
10337db96d56Sopenharmony_ci   '123.45.67.89').  This is useful when conversing with a program that uses the
10347db96d56Sopenharmony_ci   standard C library and needs objects of type :c:struct:`in_addr`, which
10357db96d56Sopenharmony_ci   is the C type for the 32-bit packed binary data this function takes as an
10367db96d56Sopenharmony_ci   argument.
10377db96d56Sopenharmony_ci
10387db96d56Sopenharmony_ci   If the byte sequence passed to this function is not exactly 4 bytes in
10397db96d56Sopenharmony_ci   length, :exc:`OSError` will be raised. :func:`inet_ntoa` does not
10407db96d56Sopenharmony_ci   support IPv6, and :func:`inet_ntop` should be used instead for IPv4/v6 dual
10417db96d56Sopenharmony_ci   stack support.
10427db96d56Sopenharmony_ci
10437db96d56Sopenharmony_ci   .. versionchanged:: 3.5
10447db96d56Sopenharmony_ci      Writable :term:`bytes-like object` is now accepted.
10457db96d56Sopenharmony_ci
10467db96d56Sopenharmony_ci
10477db96d56Sopenharmony_ci.. function:: inet_pton(address_family, ip_string)
10487db96d56Sopenharmony_ci
10497db96d56Sopenharmony_ci   Convert an IP address from its family-specific string format to a packed,
10507db96d56Sopenharmony_ci   binary format. :func:`inet_pton` is useful when a library or network protocol
10517db96d56Sopenharmony_ci   calls for an object of type :c:struct:`in_addr` (similar to
10527db96d56Sopenharmony_ci   :func:`inet_aton`) or :c:struct:`in6_addr`.
10537db96d56Sopenharmony_ci
10547db96d56Sopenharmony_ci   Supported values for *address_family* are currently :const:`AF_INET` and
10557db96d56Sopenharmony_ci   :const:`AF_INET6`. If the IP address string *ip_string* is invalid,
10567db96d56Sopenharmony_ci   :exc:`OSError` will be raised. Note that exactly what is valid depends on
10577db96d56Sopenharmony_ci   both the value of *address_family* and the underlying implementation of
10587db96d56Sopenharmony_ci   :c:func:`inet_pton`.
10597db96d56Sopenharmony_ci
10607db96d56Sopenharmony_ci   .. availability:: Unix, Windows.
10617db96d56Sopenharmony_ci
10627db96d56Sopenharmony_ci   .. versionchanged:: 3.4
10637db96d56Sopenharmony_ci      Windows support added
10647db96d56Sopenharmony_ci
10657db96d56Sopenharmony_ci
10667db96d56Sopenharmony_ci.. function:: inet_ntop(address_family, packed_ip)
10677db96d56Sopenharmony_ci
10687db96d56Sopenharmony_ci   Convert a packed IP address (a :term:`bytes-like object` of some number of
10697db96d56Sopenharmony_ci   bytes) to its standard, family-specific string representation (for
10707db96d56Sopenharmony_ci   example, ``'7.10.0.5'`` or ``'5aef:2b::8'``).
10717db96d56Sopenharmony_ci   :func:`inet_ntop` is useful when a library or network protocol returns an
10727db96d56Sopenharmony_ci   object of type :c:struct:`in_addr` (similar to :func:`inet_ntoa`) or
10737db96d56Sopenharmony_ci   :c:struct:`in6_addr`.
10747db96d56Sopenharmony_ci
10757db96d56Sopenharmony_ci   Supported values for *address_family* are currently :const:`AF_INET` and
10767db96d56Sopenharmony_ci   :const:`AF_INET6`. If the bytes object *packed_ip* is not the correct
10777db96d56Sopenharmony_ci   length for the specified address family, :exc:`ValueError` will be raised.
10787db96d56Sopenharmony_ci   :exc:`OSError` is raised for errors from the call to :func:`inet_ntop`.
10797db96d56Sopenharmony_ci
10807db96d56Sopenharmony_ci   .. availability:: Unix, Windows.
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_ci   .. versionchanged:: 3.4
10837db96d56Sopenharmony_ci      Windows support added
10847db96d56Sopenharmony_ci
10857db96d56Sopenharmony_ci   .. versionchanged:: 3.5
10867db96d56Sopenharmony_ci      Writable :term:`bytes-like object` is now accepted.
10877db96d56Sopenharmony_ci
10887db96d56Sopenharmony_ci
10897db96d56Sopenharmony_ci..
10907db96d56Sopenharmony_ci   XXX: Are sendmsg(), recvmsg() and CMSG_*() available on any
10917db96d56Sopenharmony_ci   non-Unix platforms?  The old (obsolete?) 4.2BSD form of the
10927db96d56Sopenharmony_ci   interface, in which struct msghdr has no msg_control or
10937db96d56Sopenharmony_ci   msg_controllen members, is not currently supported.
10947db96d56Sopenharmony_ci
10957db96d56Sopenharmony_ci.. function:: CMSG_LEN(length)
10967db96d56Sopenharmony_ci
10977db96d56Sopenharmony_ci   Return the total length, without trailing padding, of an ancillary
10987db96d56Sopenharmony_ci   data item with associated data of the given *length*.  This value
10997db96d56Sopenharmony_ci   can often be used as the buffer size for :meth:`~socket.recvmsg` to
11007db96d56Sopenharmony_ci   receive a single item of ancillary data, but :rfc:`3542` requires
11017db96d56Sopenharmony_ci   portable applications to use :func:`CMSG_SPACE` and thus include
11027db96d56Sopenharmony_ci   space for padding, even when the item will be the last in the
11037db96d56Sopenharmony_ci   buffer.  Raises :exc:`OverflowError` if *length* is outside the
11047db96d56Sopenharmony_ci   permissible range of values.
11057db96d56Sopenharmony_ci
11067db96d56Sopenharmony_ci   .. availability:: Unix, not Emscripten, not WASI.
11077db96d56Sopenharmony_ci
11087db96d56Sopenharmony_ci      Most Unix platforms.
11097db96d56Sopenharmony_ci
11107db96d56Sopenharmony_ci   .. versionadded:: 3.3
11117db96d56Sopenharmony_ci
11127db96d56Sopenharmony_ci
11137db96d56Sopenharmony_ci.. function:: CMSG_SPACE(length)
11147db96d56Sopenharmony_ci
11157db96d56Sopenharmony_ci   Return the buffer size needed for :meth:`~socket.recvmsg` to
11167db96d56Sopenharmony_ci   receive an ancillary data item with associated data of the given
11177db96d56Sopenharmony_ci   *length*, along with any trailing padding.  The buffer space needed
11187db96d56Sopenharmony_ci   to receive multiple items is the sum of the :func:`CMSG_SPACE`
11197db96d56Sopenharmony_ci   values for their associated data lengths.  Raises
11207db96d56Sopenharmony_ci   :exc:`OverflowError` if *length* is outside the permissible range
11217db96d56Sopenharmony_ci   of values.
11227db96d56Sopenharmony_ci
11237db96d56Sopenharmony_ci   Note that some systems might support ancillary data without
11247db96d56Sopenharmony_ci   providing this function.  Also note that setting the buffer size
11257db96d56Sopenharmony_ci   using the results of this function may not precisely limit the
11267db96d56Sopenharmony_ci   amount of ancillary data that can be received, since additional
11277db96d56Sopenharmony_ci   data may be able to fit into the padding area.
11287db96d56Sopenharmony_ci
11297db96d56Sopenharmony_ci   .. availability:: Unix, not Emscripten, not WASI.
11307db96d56Sopenharmony_ci
11317db96d56Sopenharmony_ci      most Unix platforms.
11327db96d56Sopenharmony_ci
11337db96d56Sopenharmony_ci   .. versionadded:: 3.3
11347db96d56Sopenharmony_ci
11357db96d56Sopenharmony_ci
11367db96d56Sopenharmony_ci.. function:: getdefaulttimeout()
11377db96d56Sopenharmony_ci
11387db96d56Sopenharmony_ci   Return the default timeout in seconds (float) for new socket objects. A value
11397db96d56Sopenharmony_ci   of ``None`` indicates that new socket objects have no timeout. When the socket
11407db96d56Sopenharmony_ci   module is first imported, the default is ``None``.
11417db96d56Sopenharmony_ci
11427db96d56Sopenharmony_ci
11437db96d56Sopenharmony_ci.. function:: setdefaulttimeout(timeout)
11447db96d56Sopenharmony_ci
11457db96d56Sopenharmony_ci   Set the default timeout in seconds (float) for new socket objects.  When
11467db96d56Sopenharmony_ci   the socket module is first imported, the default is ``None``.  See
11477db96d56Sopenharmony_ci   :meth:`~socket.settimeout` for possible values and their respective
11487db96d56Sopenharmony_ci   meanings.
11497db96d56Sopenharmony_ci
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_ci.. function:: sethostname(name)
11527db96d56Sopenharmony_ci
11537db96d56Sopenharmony_ci   Set the machine's hostname to *name*.  This will raise an
11547db96d56Sopenharmony_ci   :exc:`OSError` if you don't have enough rights.
11557db96d56Sopenharmony_ci
11567db96d56Sopenharmony_ci   .. audit-event:: socket.sethostname name socket.sethostname
11577db96d56Sopenharmony_ci
11587db96d56Sopenharmony_ci   .. availability:: Unix.
11597db96d56Sopenharmony_ci
11607db96d56Sopenharmony_ci   .. versionadded:: 3.3
11617db96d56Sopenharmony_ci
11627db96d56Sopenharmony_ci
11637db96d56Sopenharmony_ci.. function:: if_nameindex()
11647db96d56Sopenharmony_ci
11657db96d56Sopenharmony_ci   Return a list of network interface information
11667db96d56Sopenharmony_ci   (index int, name string) tuples.
11677db96d56Sopenharmony_ci   :exc:`OSError` if the system call fails.
11687db96d56Sopenharmony_ci
11697db96d56Sopenharmony_ci   .. availability:: Unix, Windows, not Emscripten, not WASI.
11707db96d56Sopenharmony_ci
11717db96d56Sopenharmony_ci   .. versionadded:: 3.3
11727db96d56Sopenharmony_ci
11737db96d56Sopenharmony_ci   .. versionchanged:: 3.8
11747db96d56Sopenharmony_ci      Windows support was added.
11757db96d56Sopenharmony_ci
11767db96d56Sopenharmony_ci   .. note::
11777db96d56Sopenharmony_ci
11787db96d56Sopenharmony_ci      On Windows network interfaces have different names in different contexts
11797db96d56Sopenharmony_ci      (all names are examples):
11807db96d56Sopenharmony_ci
11817db96d56Sopenharmony_ci      * UUID: ``{FB605B73-AAC2-49A6-9A2F-25416AEA0573}``
11827db96d56Sopenharmony_ci      * name: ``ethernet_32770``
11837db96d56Sopenharmony_ci      * friendly name: ``vEthernet (nat)``
11847db96d56Sopenharmony_ci      * description: ``Hyper-V Virtual Ethernet Adapter``
11857db96d56Sopenharmony_ci
11867db96d56Sopenharmony_ci      This function returns names of the second form from the list, ``ethernet_32770``
11877db96d56Sopenharmony_ci      in this example case.
11887db96d56Sopenharmony_ci
11897db96d56Sopenharmony_ci
11907db96d56Sopenharmony_ci.. function:: if_nametoindex(if_name)
11917db96d56Sopenharmony_ci
11927db96d56Sopenharmony_ci   Return a network interface index number corresponding to an
11937db96d56Sopenharmony_ci   interface name.
11947db96d56Sopenharmony_ci   :exc:`OSError` if no interface with the given name exists.
11957db96d56Sopenharmony_ci
11967db96d56Sopenharmony_ci   .. availability:: Unix, Windows, not Emscripten, not WASI.
11977db96d56Sopenharmony_ci
11987db96d56Sopenharmony_ci   .. versionadded:: 3.3
11997db96d56Sopenharmony_ci
12007db96d56Sopenharmony_ci   .. versionchanged:: 3.8
12017db96d56Sopenharmony_ci      Windows support was added.
12027db96d56Sopenharmony_ci
12037db96d56Sopenharmony_ci   .. seealso::
12047db96d56Sopenharmony_ci      "Interface name" is a name as documented in :func:`if_nameindex`.
12057db96d56Sopenharmony_ci
12067db96d56Sopenharmony_ci
12077db96d56Sopenharmony_ci.. function:: if_indextoname(if_index)
12087db96d56Sopenharmony_ci
12097db96d56Sopenharmony_ci   Return a network interface name corresponding to an
12107db96d56Sopenharmony_ci   interface index number.
12117db96d56Sopenharmony_ci   :exc:`OSError` if no interface with the given index exists.
12127db96d56Sopenharmony_ci
12137db96d56Sopenharmony_ci   .. availability:: Unix, Windows, not Emscripten, not WASI.
12147db96d56Sopenharmony_ci
12157db96d56Sopenharmony_ci   .. versionadded:: 3.3
12167db96d56Sopenharmony_ci
12177db96d56Sopenharmony_ci   .. versionchanged:: 3.8
12187db96d56Sopenharmony_ci      Windows support was added.
12197db96d56Sopenharmony_ci
12207db96d56Sopenharmony_ci   .. seealso::
12217db96d56Sopenharmony_ci      "Interface name" is a name as documented in :func:`if_nameindex`.
12227db96d56Sopenharmony_ci
12237db96d56Sopenharmony_ci
12247db96d56Sopenharmony_ci.. function:: send_fds(sock, buffers, fds[, flags[, address]])
12257db96d56Sopenharmony_ci
12267db96d56Sopenharmony_ci   Send the list of file descriptors *fds* over an :const:`AF_UNIX` socket *sock*.
12277db96d56Sopenharmony_ci   The *fds* parameter is a sequence of file descriptors.
12287db96d56Sopenharmony_ci   Consult :meth:`sendmsg` for the documentation of these parameters.
12297db96d56Sopenharmony_ci
12307db96d56Sopenharmony_ci   .. availability:: Unix, Windows, not Emscripten, not WASI.
12317db96d56Sopenharmony_ci
12327db96d56Sopenharmony_ci      Unix platforms supporting :meth:`~socket.sendmsg`
12337db96d56Sopenharmony_ci      and :const:`SCM_RIGHTS` mechanism.
12347db96d56Sopenharmony_ci
12357db96d56Sopenharmony_ci   .. versionadded:: 3.9
12367db96d56Sopenharmony_ci
12377db96d56Sopenharmony_ci
12387db96d56Sopenharmony_ci.. function:: recv_fds(sock, bufsize, maxfds[, flags])
12397db96d56Sopenharmony_ci
12407db96d56Sopenharmony_ci   Receive up to *maxfds* file descriptors from an :const:`AF_UNIX` socket *sock*.
12417db96d56Sopenharmony_ci   Return ``(msg, list(fds), flags, addr)``.
12427db96d56Sopenharmony_ci   Consult :meth:`recvmsg` for the documentation of these parameters.
12437db96d56Sopenharmony_ci
12447db96d56Sopenharmony_ci   .. availability:: Unix, Windows, not Emscripten, not WASI.
12457db96d56Sopenharmony_ci
12467db96d56Sopenharmony_ci      Unix platforms supporting :meth:`~socket.sendmsg`
12477db96d56Sopenharmony_ci      and :const:`SCM_RIGHTS` mechanism.
12487db96d56Sopenharmony_ci
12497db96d56Sopenharmony_ci   .. versionadded:: 3.9
12507db96d56Sopenharmony_ci
12517db96d56Sopenharmony_ci   .. note::
12527db96d56Sopenharmony_ci
12537db96d56Sopenharmony_ci      Any truncated integers at the end of the list of file descriptors.
12547db96d56Sopenharmony_ci
12557db96d56Sopenharmony_ci
12567db96d56Sopenharmony_ci.. _socket-objects:
12577db96d56Sopenharmony_ci
12587db96d56Sopenharmony_ciSocket Objects
12597db96d56Sopenharmony_ci--------------
12607db96d56Sopenharmony_ci
12617db96d56Sopenharmony_ciSocket objects have the following methods.  Except for
12627db96d56Sopenharmony_ci:meth:`~socket.makefile`, these correspond to Unix system calls applicable
12637db96d56Sopenharmony_cito sockets.
12647db96d56Sopenharmony_ci
12657db96d56Sopenharmony_ci.. versionchanged:: 3.2
12667db96d56Sopenharmony_ci   Support for the :term:`context manager` protocol was added.  Exiting the
12677db96d56Sopenharmony_ci   context manager is equivalent to calling :meth:`~socket.close`.
12687db96d56Sopenharmony_ci
12697db96d56Sopenharmony_ci
12707db96d56Sopenharmony_ci.. method:: socket.accept()
12717db96d56Sopenharmony_ci
12727db96d56Sopenharmony_ci   Accept a connection. The socket must be bound to an address and listening for
12737db96d56Sopenharmony_ci   connections. The return value is a pair ``(conn, address)`` where *conn* is a
12747db96d56Sopenharmony_ci   *new* socket object usable to send and receive data on the connection, and
12757db96d56Sopenharmony_ci   *address* is the address bound to the socket on the other end of the connection.
12767db96d56Sopenharmony_ci
12777db96d56Sopenharmony_ci   The newly created socket is :ref:`non-inheritable <fd_inheritance>`.
12787db96d56Sopenharmony_ci
12797db96d56Sopenharmony_ci   .. versionchanged:: 3.4
12807db96d56Sopenharmony_ci      The socket is now non-inheritable.
12817db96d56Sopenharmony_ci
12827db96d56Sopenharmony_ci   .. versionchanged:: 3.5
12837db96d56Sopenharmony_ci      If the system call is interrupted and the signal handler does not raise
12847db96d56Sopenharmony_ci      an exception, the method now retries the system call instead of raising
12857db96d56Sopenharmony_ci      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
12867db96d56Sopenharmony_ci
12877db96d56Sopenharmony_ci
12887db96d56Sopenharmony_ci.. method:: socket.bind(address)
12897db96d56Sopenharmony_ci
12907db96d56Sopenharmony_ci   Bind the socket to *address*.  The socket must not already be bound. (The format
12917db96d56Sopenharmony_ci   of *address* depends on the address family --- see above.)
12927db96d56Sopenharmony_ci
12937db96d56Sopenharmony_ci   .. audit-event:: socket.bind self,address socket.socket.bind
12947db96d56Sopenharmony_ci
12957db96d56Sopenharmony_ci   .. availability:: not WASI.
12967db96d56Sopenharmony_ci
12977db96d56Sopenharmony_ci
12987db96d56Sopenharmony_ci.. method:: socket.close()
12997db96d56Sopenharmony_ci
13007db96d56Sopenharmony_ci   Mark the socket closed.  The underlying system resource (e.g. a file
13017db96d56Sopenharmony_ci   descriptor) is also closed when all file objects from :meth:`makefile()`
13027db96d56Sopenharmony_ci   are closed.  Once that happens, all future operations on the socket
13037db96d56Sopenharmony_ci   object will fail. The remote end will receive no more data (after
13047db96d56Sopenharmony_ci   queued data is flushed).
13057db96d56Sopenharmony_ci
13067db96d56Sopenharmony_ci   Sockets are automatically closed when they are garbage-collected, but
13077db96d56Sopenharmony_ci   it is recommended to :meth:`close` them explicitly, or to use a
13087db96d56Sopenharmony_ci   :keyword:`with` statement around them.
13097db96d56Sopenharmony_ci
13107db96d56Sopenharmony_ci   .. versionchanged:: 3.6
13117db96d56Sopenharmony_ci      :exc:`OSError` is now raised if an error occurs when the underlying
13127db96d56Sopenharmony_ci      :c:func:`close` call is made.
13137db96d56Sopenharmony_ci
13147db96d56Sopenharmony_ci   .. note::
13157db96d56Sopenharmony_ci
13167db96d56Sopenharmony_ci      :meth:`close()` releases the resource associated with a connection but
13177db96d56Sopenharmony_ci      does not necessarily close the connection immediately.  If you want
13187db96d56Sopenharmony_ci      to close the connection in a timely fashion, call :meth:`shutdown()`
13197db96d56Sopenharmony_ci      before :meth:`close()`.
13207db96d56Sopenharmony_ci
13217db96d56Sopenharmony_ci
13227db96d56Sopenharmony_ci.. method:: socket.connect(address)
13237db96d56Sopenharmony_ci
13247db96d56Sopenharmony_ci   Connect to a remote socket at *address*. (The format of *address* depends on the
13257db96d56Sopenharmony_ci   address family --- see above.)
13267db96d56Sopenharmony_ci
13277db96d56Sopenharmony_ci   If the connection is interrupted by a signal, the method waits until the
13287db96d56Sopenharmony_ci   connection completes, or raise a :exc:`TimeoutError` on timeout, if the
13297db96d56Sopenharmony_ci   signal handler doesn't raise an exception and the socket is blocking or has
13307db96d56Sopenharmony_ci   a timeout. For non-blocking sockets, the method raises an
13317db96d56Sopenharmony_ci   :exc:`InterruptedError` exception if the connection is interrupted by a
13327db96d56Sopenharmony_ci   signal (or the exception raised by the signal handler).
13337db96d56Sopenharmony_ci
13347db96d56Sopenharmony_ci   .. audit-event:: socket.connect self,address socket.socket.connect
13357db96d56Sopenharmony_ci
13367db96d56Sopenharmony_ci   .. versionchanged:: 3.5
13377db96d56Sopenharmony_ci      The method now waits until the connection completes instead of raising an
13387db96d56Sopenharmony_ci      :exc:`InterruptedError` exception if the connection is interrupted by a
13397db96d56Sopenharmony_ci      signal, the signal handler doesn't raise an exception and the socket is
13407db96d56Sopenharmony_ci      blocking or has a timeout (see the :pep:`475` for the rationale).
13417db96d56Sopenharmony_ci
13427db96d56Sopenharmony_ci   .. availability:: not WASI.
13437db96d56Sopenharmony_ci
13447db96d56Sopenharmony_ci
13457db96d56Sopenharmony_ci.. method:: socket.connect_ex(address)
13467db96d56Sopenharmony_ci
13477db96d56Sopenharmony_ci   Like ``connect(address)``, but return an error indicator instead of raising an
13487db96d56Sopenharmony_ci   exception for errors returned by the C-level :c:func:`connect` call (other
13497db96d56Sopenharmony_ci   problems, such as "host not found," can still raise exceptions).  The error
13507db96d56Sopenharmony_ci   indicator is ``0`` if the operation succeeded, otherwise the value of the
13517db96d56Sopenharmony_ci   :c:data:`errno` variable.  This is useful to support, for example, asynchronous
13527db96d56Sopenharmony_ci   connects.
13537db96d56Sopenharmony_ci
13547db96d56Sopenharmony_ci   .. audit-event:: socket.connect self,address socket.socket.connect_ex
13557db96d56Sopenharmony_ci
13567db96d56Sopenharmony_ci   .. availability:: not WASI.
13577db96d56Sopenharmony_ci
13587db96d56Sopenharmony_ci.. method:: socket.detach()
13597db96d56Sopenharmony_ci
13607db96d56Sopenharmony_ci   Put the socket object into closed state without actually closing the
13617db96d56Sopenharmony_ci   underlying file descriptor.  The file descriptor is returned, and can
13627db96d56Sopenharmony_ci   be reused for other purposes.
13637db96d56Sopenharmony_ci
13647db96d56Sopenharmony_ci   .. versionadded:: 3.2
13657db96d56Sopenharmony_ci
13667db96d56Sopenharmony_ci
13677db96d56Sopenharmony_ci.. method:: socket.dup()
13687db96d56Sopenharmony_ci
13697db96d56Sopenharmony_ci   Duplicate the socket.
13707db96d56Sopenharmony_ci
13717db96d56Sopenharmony_ci   The newly created socket is :ref:`non-inheritable <fd_inheritance>`.
13727db96d56Sopenharmony_ci
13737db96d56Sopenharmony_ci   .. versionchanged:: 3.4
13747db96d56Sopenharmony_ci      The socket is now non-inheritable.
13757db96d56Sopenharmony_ci
13767db96d56Sopenharmony_ci   .. availability:: not WASI.
13777db96d56Sopenharmony_ci
13787db96d56Sopenharmony_ci
13797db96d56Sopenharmony_ci.. method:: socket.fileno()
13807db96d56Sopenharmony_ci
13817db96d56Sopenharmony_ci   Return the socket's file descriptor (a small integer), or -1 on failure. This
13827db96d56Sopenharmony_ci   is useful with :func:`select.select`.
13837db96d56Sopenharmony_ci
13847db96d56Sopenharmony_ci   Under Windows the small integer returned by this method cannot be used where a
13857db96d56Sopenharmony_ci   file descriptor can be used (such as :func:`os.fdopen`).  Unix does not have
13867db96d56Sopenharmony_ci   this limitation.
13877db96d56Sopenharmony_ci
13887db96d56Sopenharmony_ci.. method:: socket.get_inheritable()
13897db96d56Sopenharmony_ci
13907db96d56Sopenharmony_ci   Get the :ref:`inheritable flag <fd_inheritance>` of the socket's file
13917db96d56Sopenharmony_ci   descriptor or socket's handle: ``True`` if the socket can be inherited in
13927db96d56Sopenharmony_ci   child processes, ``False`` if it cannot.
13937db96d56Sopenharmony_ci
13947db96d56Sopenharmony_ci   .. versionadded:: 3.4
13957db96d56Sopenharmony_ci
13967db96d56Sopenharmony_ci
13977db96d56Sopenharmony_ci.. method:: socket.getpeername()
13987db96d56Sopenharmony_ci
13997db96d56Sopenharmony_ci   Return the remote address to which the socket is connected.  This is useful to
14007db96d56Sopenharmony_ci   find out the port number of a remote IPv4/v6 socket, for instance. (The format
14017db96d56Sopenharmony_ci   of the address returned depends on the address family --- see above.)  On some
14027db96d56Sopenharmony_ci   systems this function is not supported.
14037db96d56Sopenharmony_ci
14047db96d56Sopenharmony_ci
14057db96d56Sopenharmony_ci.. method:: socket.getsockname()
14067db96d56Sopenharmony_ci
14077db96d56Sopenharmony_ci   Return the socket's own address.  This is useful to find out the port number of
14087db96d56Sopenharmony_ci   an IPv4/v6 socket, for instance. (The format of the address returned depends on
14097db96d56Sopenharmony_ci   the address family --- see above.)
14107db96d56Sopenharmony_ci
14117db96d56Sopenharmony_ci
14127db96d56Sopenharmony_ci.. method:: socket.getsockopt(level, optname[, buflen])
14137db96d56Sopenharmony_ci
14147db96d56Sopenharmony_ci   Return the value of the given socket option (see the Unix man page
14157db96d56Sopenharmony_ci   :manpage:`getsockopt(2)`).  The needed symbolic constants (:const:`SO_\*` etc.)
14167db96d56Sopenharmony_ci   are defined in this module.  If *buflen* is absent, an integer option is assumed
14177db96d56Sopenharmony_ci   and its integer value is returned by the function.  If *buflen* is present, it
14187db96d56Sopenharmony_ci   specifies the maximum length of the buffer used to receive the option in, and
14197db96d56Sopenharmony_ci   this buffer is returned as a bytes object.  It is up to the caller to decode the
14207db96d56Sopenharmony_ci   contents of the buffer (see the optional built-in module :mod:`struct` for a way
14217db96d56Sopenharmony_ci   to decode C structures encoded as byte strings).
14227db96d56Sopenharmony_ci
14237db96d56Sopenharmony_ci   .. availability:: not WASI.
14247db96d56Sopenharmony_ci
14257db96d56Sopenharmony_ci
14267db96d56Sopenharmony_ci.. method:: socket.getblocking()
14277db96d56Sopenharmony_ci
14287db96d56Sopenharmony_ci   Return ``True`` if socket is in blocking mode, ``False`` if in
14297db96d56Sopenharmony_ci   non-blocking.
14307db96d56Sopenharmony_ci
14317db96d56Sopenharmony_ci   This is equivalent to checking ``socket.gettimeout() != 0``.
14327db96d56Sopenharmony_ci
14337db96d56Sopenharmony_ci   .. versionadded:: 3.7
14347db96d56Sopenharmony_ci
14357db96d56Sopenharmony_ci
14367db96d56Sopenharmony_ci.. method:: socket.gettimeout()
14377db96d56Sopenharmony_ci
14387db96d56Sopenharmony_ci   Return the timeout in seconds (float) associated with socket operations,
14397db96d56Sopenharmony_ci   or ``None`` if no timeout is set.  This reflects the last call to
14407db96d56Sopenharmony_ci   :meth:`setblocking` or :meth:`settimeout`.
14417db96d56Sopenharmony_ci
14427db96d56Sopenharmony_ci
14437db96d56Sopenharmony_ci.. method:: socket.ioctl(control, option)
14447db96d56Sopenharmony_ci
14457db96d56Sopenharmony_ci   :platform: Windows
14467db96d56Sopenharmony_ci
14477db96d56Sopenharmony_ci   The :meth:`ioctl` method is a limited interface to the WSAIoctl system
14487db96d56Sopenharmony_ci   interface.  Please refer to the `Win32 documentation
14497db96d56Sopenharmony_ci   <https://msdn.microsoft.com/en-us/library/ms741621%28VS.85%29.aspx>`_ for more
14507db96d56Sopenharmony_ci   information.
14517db96d56Sopenharmony_ci
14527db96d56Sopenharmony_ci   On other platforms, the generic :func:`fcntl.fcntl` and :func:`fcntl.ioctl`
14537db96d56Sopenharmony_ci   functions may be used; they accept a socket object as their first argument.
14547db96d56Sopenharmony_ci
14557db96d56Sopenharmony_ci   Currently only the following control codes are supported:
14567db96d56Sopenharmony_ci   ``SIO_RCVALL``, ``SIO_KEEPALIVE_VALS``, and ``SIO_LOOPBACK_FAST_PATH``.
14577db96d56Sopenharmony_ci
14587db96d56Sopenharmony_ci   .. versionchanged:: 3.6
14597db96d56Sopenharmony_ci      ``SIO_LOOPBACK_FAST_PATH`` was added.
14607db96d56Sopenharmony_ci
14617db96d56Sopenharmony_ci.. method:: socket.listen([backlog])
14627db96d56Sopenharmony_ci
14637db96d56Sopenharmony_ci   Enable a server to accept connections.  If *backlog* is specified, it must
14647db96d56Sopenharmony_ci   be at least 0 (if it is lower, it is set to 0); it specifies the number of
14657db96d56Sopenharmony_ci   unaccepted connections that the system will allow before refusing new
14667db96d56Sopenharmony_ci   connections. If not specified, a default reasonable value is chosen.
14677db96d56Sopenharmony_ci
14687db96d56Sopenharmony_ci   .. availability:: not WASI.
14697db96d56Sopenharmony_ci
14707db96d56Sopenharmony_ci   .. versionchanged:: 3.5
14717db96d56Sopenharmony_ci      The *backlog* parameter is now optional.
14727db96d56Sopenharmony_ci
14737db96d56Sopenharmony_ci
14747db96d56Sopenharmony_ci.. method:: socket.makefile(mode='r', buffering=None, *, encoding=None, \
14757db96d56Sopenharmony_ci                            errors=None, newline=None)
14767db96d56Sopenharmony_ci
14777db96d56Sopenharmony_ci   .. index:: single: I/O control; buffering
14787db96d56Sopenharmony_ci
14797db96d56Sopenharmony_ci   Return a :term:`file object` associated with the socket.  The exact returned
14807db96d56Sopenharmony_ci   type depends on the arguments given to :meth:`makefile`.  These arguments are
14817db96d56Sopenharmony_ci   interpreted the same way as by the built-in :func:`open` function, except
14827db96d56Sopenharmony_ci   the only supported *mode* values are ``'r'`` (default), ``'w'`` and ``'b'``.
14837db96d56Sopenharmony_ci
14847db96d56Sopenharmony_ci   The socket must be in blocking mode; it can have a timeout, but the file
14857db96d56Sopenharmony_ci   object's internal buffer may end up in an inconsistent state if a timeout
14867db96d56Sopenharmony_ci   occurs.
14877db96d56Sopenharmony_ci
14887db96d56Sopenharmony_ci   Closing the file object returned by :meth:`makefile` won't close the
14897db96d56Sopenharmony_ci   original socket unless all other file objects have been closed and
14907db96d56Sopenharmony_ci   :meth:`socket.close` has been called on the socket object.
14917db96d56Sopenharmony_ci
14927db96d56Sopenharmony_ci   .. note::
14937db96d56Sopenharmony_ci
14947db96d56Sopenharmony_ci      On Windows, the file-like object created by :meth:`makefile` cannot be
14957db96d56Sopenharmony_ci      used where a file object with a file descriptor is expected, such as the
14967db96d56Sopenharmony_ci      stream arguments of :meth:`subprocess.Popen`.
14977db96d56Sopenharmony_ci
14987db96d56Sopenharmony_ci
14997db96d56Sopenharmony_ci.. method:: socket.recv(bufsize[, flags])
15007db96d56Sopenharmony_ci
15017db96d56Sopenharmony_ci   Receive data from the socket.  The return value is a bytes object representing the
15027db96d56Sopenharmony_ci   data received.  The maximum amount of data to be received at once is specified
15037db96d56Sopenharmony_ci   by *bufsize*.  See the Unix manual page :manpage:`recv(2)` for the meaning of
15047db96d56Sopenharmony_ci   the optional argument *flags*; it defaults to zero.
15057db96d56Sopenharmony_ci
15067db96d56Sopenharmony_ci   .. note::
15077db96d56Sopenharmony_ci
15087db96d56Sopenharmony_ci      For best match with hardware and network realities, the value of  *bufsize*
15097db96d56Sopenharmony_ci      should be a relatively small power of 2, for example, 4096.
15107db96d56Sopenharmony_ci
15117db96d56Sopenharmony_ci   .. versionchanged:: 3.5
15127db96d56Sopenharmony_ci      If the system call is interrupted and the signal handler does not raise
15137db96d56Sopenharmony_ci      an exception, the method now retries the system call instead of raising
15147db96d56Sopenharmony_ci      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
15157db96d56Sopenharmony_ci
15167db96d56Sopenharmony_ci
15177db96d56Sopenharmony_ci.. method:: socket.recvfrom(bufsize[, flags])
15187db96d56Sopenharmony_ci
15197db96d56Sopenharmony_ci   Receive data from the socket.  The return value is a pair ``(bytes, address)``
15207db96d56Sopenharmony_ci   where *bytes* is a bytes object representing the data received and *address* is the
15217db96d56Sopenharmony_ci   address of the socket sending the data.  See the Unix manual page
15227db96d56Sopenharmony_ci   :manpage:`recv(2)` for the meaning of the optional argument *flags*; it defaults
15237db96d56Sopenharmony_ci   to zero. (The format of *address* depends on the address family --- see above.)
15247db96d56Sopenharmony_ci
15257db96d56Sopenharmony_ci   .. versionchanged:: 3.5
15267db96d56Sopenharmony_ci      If the system call is interrupted and the signal handler does not raise
15277db96d56Sopenharmony_ci      an exception, the method now retries the system call instead of raising
15287db96d56Sopenharmony_ci      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
15297db96d56Sopenharmony_ci
15307db96d56Sopenharmony_ci   .. versionchanged:: 3.7
15317db96d56Sopenharmony_ci      For multicast IPv6 address, first item of *address* does not contain
15327db96d56Sopenharmony_ci      ``%scope_id`` part anymore. In order to get full IPv6 address use
15337db96d56Sopenharmony_ci      :func:`getnameinfo`.
15347db96d56Sopenharmony_ci
15357db96d56Sopenharmony_ci.. method:: socket.recvmsg(bufsize[, ancbufsize[, flags]])
15367db96d56Sopenharmony_ci
15377db96d56Sopenharmony_ci   Receive normal data (up to *bufsize* bytes) and ancillary data from
15387db96d56Sopenharmony_ci   the socket.  The *ancbufsize* argument sets the size in bytes of
15397db96d56Sopenharmony_ci   the internal buffer used to receive the ancillary data; it defaults
15407db96d56Sopenharmony_ci   to 0, meaning that no ancillary data will be received.  Appropriate
15417db96d56Sopenharmony_ci   buffer sizes for ancillary data can be calculated using
15427db96d56Sopenharmony_ci   :func:`CMSG_SPACE` or :func:`CMSG_LEN`, and items which do not fit
15437db96d56Sopenharmony_ci   into the buffer might be truncated or discarded.  The *flags*
15447db96d56Sopenharmony_ci   argument defaults to 0 and has the same meaning as for
15457db96d56Sopenharmony_ci   :meth:`recv`.
15467db96d56Sopenharmony_ci
15477db96d56Sopenharmony_ci   The return value is a 4-tuple: ``(data, ancdata, msg_flags,
15487db96d56Sopenharmony_ci   address)``.  The *data* item is a :class:`bytes` object holding the
15497db96d56Sopenharmony_ci   non-ancillary data received.  The *ancdata* item is a list of zero
15507db96d56Sopenharmony_ci   or more tuples ``(cmsg_level, cmsg_type, cmsg_data)`` representing
15517db96d56Sopenharmony_ci   the ancillary data (control messages) received: *cmsg_level* and
15527db96d56Sopenharmony_ci   *cmsg_type* are integers specifying the protocol level and
15537db96d56Sopenharmony_ci   protocol-specific type respectively, and *cmsg_data* is a
15547db96d56Sopenharmony_ci   :class:`bytes` object holding the associated data.  The *msg_flags*
15557db96d56Sopenharmony_ci   item is the bitwise OR of various flags indicating conditions on
15567db96d56Sopenharmony_ci   the received message; see your system documentation for details.
15577db96d56Sopenharmony_ci   If the receiving socket is unconnected, *address* is the address of
15587db96d56Sopenharmony_ci   the sending socket, if available; otherwise, its value is
15597db96d56Sopenharmony_ci   unspecified.
15607db96d56Sopenharmony_ci
15617db96d56Sopenharmony_ci   On some systems, :meth:`sendmsg` and :meth:`recvmsg` can be used to
15627db96d56Sopenharmony_ci   pass file descriptors between processes over an :const:`AF_UNIX`
15637db96d56Sopenharmony_ci   socket.  When this facility is used (it is often restricted to
15647db96d56Sopenharmony_ci   :const:`SOCK_STREAM` sockets), :meth:`recvmsg` will return, in its
15657db96d56Sopenharmony_ci   ancillary data, items of the form ``(socket.SOL_SOCKET,
15667db96d56Sopenharmony_ci   socket.SCM_RIGHTS, fds)``, where *fds* is a :class:`bytes` object
15677db96d56Sopenharmony_ci   representing the new file descriptors as a binary array of the
15687db96d56Sopenharmony_ci   native C :c:expr:`int` type.  If :meth:`recvmsg` raises an
15697db96d56Sopenharmony_ci   exception after the system call returns, it will first attempt to
15707db96d56Sopenharmony_ci   close any file descriptors received via this mechanism.
15717db96d56Sopenharmony_ci
15727db96d56Sopenharmony_ci   Some systems do not indicate the truncated length of ancillary data
15737db96d56Sopenharmony_ci   items which have been only partially received.  If an item appears
15747db96d56Sopenharmony_ci   to extend beyond the end of the buffer, :meth:`recvmsg` will issue
15757db96d56Sopenharmony_ci   a :exc:`RuntimeWarning`, and will return the part of it which is
15767db96d56Sopenharmony_ci   inside the buffer provided it has not been truncated before the
15777db96d56Sopenharmony_ci   start of its associated data.
15787db96d56Sopenharmony_ci
15797db96d56Sopenharmony_ci   On systems which support the :const:`SCM_RIGHTS` mechanism, the
15807db96d56Sopenharmony_ci   following function will receive up to *maxfds* file descriptors,
15817db96d56Sopenharmony_ci   returning the message data and a list containing the descriptors
15827db96d56Sopenharmony_ci   (while ignoring unexpected conditions such as unrelated control
15837db96d56Sopenharmony_ci   messages being received).  See also :meth:`sendmsg`. ::
15847db96d56Sopenharmony_ci
15857db96d56Sopenharmony_ci      import socket, array
15867db96d56Sopenharmony_ci
15877db96d56Sopenharmony_ci      def recv_fds(sock, msglen, maxfds):
15887db96d56Sopenharmony_ci          fds = array.array("i")   # Array of ints
15897db96d56Sopenharmony_ci          msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize))
15907db96d56Sopenharmony_ci          for cmsg_level, cmsg_type, cmsg_data in ancdata:
15917db96d56Sopenharmony_ci              if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS:
15927db96d56Sopenharmony_ci                  # Append data, ignoring any truncated integers at the end.
15937db96d56Sopenharmony_ci                  fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
15947db96d56Sopenharmony_ci          return msg, list(fds)
15957db96d56Sopenharmony_ci
15967db96d56Sopenharmony_ci   .. availability:: Unix.
15977db96d56Sopenharmony_ci
15987db96d56Sopenharmony_ci      Most Unix platforms.
15997db96d56Sopenharmony_ci
16007db96d56Sopenharmony_ci   .. versionadded:: 3.3
16017db96d56Sopenharmony_ci
16027db96d56Sopenharmony_ci   .. versionchanged:: 3.5
16037db96d56Sopenharmony_ci      If the system call is interrupted and the signal handler does not raise
16047db96d56Sopenharmony_ci      an exception, the method now retries the system call instead of raising
16057db96d56Sopenharmony_ci      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
16067db96d56Sopenharmony_ci
16077db96d56Sopenharmony_ci
16087db96d56Sopenharmony_ci.. method:: socket.recvmsg_into(buffers[, ancbufsize[, flags]])
16097db96d56Sopenharmony_ci
16107db96d56Sopenharmony_ci   Receive normal data and ancillary data from the socket, behaving as
16117db96d56Sopenharmony_ci   :meth:`recvmsg` would, but scatter the non-ancillary data into a
16127db96d56Sopenharmony_ci   series of buffers instead of returning a new bytes object.  The
16137db96d56Sopenharmony_ci   *buffers* argument must be an iterable of objects that export
16147db96d56Sopenharmony_ci   writable buffers (e.g. :class:`bytearray` objects); these will be
16157db96d56Sopenharmony_ci   filled with successive chunks of the non-ancillary data until it
16167db96d56Sopenharmony_ci   has all been written or there are no more buffers.  The operating
16177db96d56Sopenharmony_ci   system may set a limit (:func:`~os.sysconf` value ``SC_IOV_MAX``)
16187db96d56Sopenharmony_ci   on the number of buffers that can be used.  The *ancbufsize* and
16197db96d56Sopenharmony_ci   *flags* arguments have the same meaning as for :meth:`recvmsg`.
16207db96d56Sopenharmony_ci
16217db96d56Sopenharmony_ci   The return value is a 4-tuple: ``(nbytes, ancdata, msg_flags,
16227db96d56Sopenharmony_ci   address)``, where *nbytes* is the total number of bytes of
16237db96d56Sopenharmony_ci   non-ancillary data written into the buffers, and *ancdata*,
16247db96d56Sopenharmony_ci   *msg_flags* and *address* are the same as for :meth:`recvmsg`.
16257db96d56Sopenharmony_ci
16267db96d56Sopenharmony_ci   Example::
16277db96d56Sopenharmony_ci
16287db96d56Sopenharmony_ci      >>> import socket
16297db96d56Sopenharmony_ci      >>> s1, s2 = socket.socketpair()
16307db96d56Sopenharmony_ci      >>> b1 = bytearray(b'----')
16317db96d56Sopenharmony_ci      >>> b2 = bytearray(b'0123456789')
16327db96d56Sopenharmony_ci      >>> b3 = bytearray(b'--------------')
16337db96d56Sopenharmony_ci      >>> s1.send(b'Mary had a little lamb')
16347db96d56Sopenharmony_ci      22
16357db96d56Sopenharmony_ci      >>> s2.recvmsg_into([b1, memoryview(b2)[2:9], b3])
16367db96d56Sopenharmony_ci      (22, [], 0, None)
16377db96d56Sopenharmony_ci      >>> [b1, b2, b3]
16387db96d56Sopenharmony_ci      [bytearray(b'Mary'), bytearray(b'01 had a 9'), bytearray(b'little lamb---')]
16397db96d56Sopenharmony_ci
16407db96d56Sopenharmony_ci   .. availability:: Unix.
16417db96d56Sopenharmony_ci
16427db96d56Sopenharmony_ci      Most Unix platforms.
16437db96d56Sopenharmony_ci
16447db96d56Sopenharmony_ci   .. versionadded:: 3.3
16457db96d56Sopenharmony_ci
16467db96d56Sopenharmony_ci
16477db96d56Sopenharmony_ci.. method:: socket.recvfrom_into(buffer[, nbytes[, flags]])
16487db96d56Sopenharmony_ci
16497db96d56Sopenharmony_ci   Receive data from the socket, writing it into *buffer* instead of creating a
16507db96d56Sopenharmony_ci   new bytestring.  The return value is a pair ``(nbytes, address)`` where *nbytes* is
16517db96d56Sopenharmony_ci   the number of bytes received and *address* is the address of the socket sending
16527db96d56Sopenharmony_ci   the data.  See the Unix manual page :manpage:`recv(2)` for the meaning of the
16537db96d56Sopenharmony_ci   optional argument *flags*; it defaults to zero.  (The format of *address*
16547db96d56Sopenharmony_ci   depends on the address family --- see above.)
16557db96d56Sopenharmony_ci
16567db96d56Sopenharmony_ci
16577db96d56Sopenharmony_ci.. method:: socket.recv_into(buffer[, nbytes[, flags]])
16587db96d56Sopenharmony_ci
16597db96d56Sopenharmony_ci   Receive up to *nbytes* bytes from the socket, storing the data into a buffer
16607db96d56Sopenharmony_ci   rather than creating a new bytestring.  If *nbytes* is not specified (or 0),
16617db96d56Sopenharmony_ci   receive up to the size available in the given buffer.  Returns the number of
16627db96d56Sopenharmony_ci   bytes received.  See the Unix manual page :manpage:`recv(2)` for the meaning
16637db96d56Sopenharmony_ci   of the optional argument *flags*; it defaults to zero.
16647db96d56Sopenharmony_ci
16657db96d56Sopenharmony_ci
16667db96d56Sopenharmony_ci.. method:: socket.send(bytes[, flags])
16677db96d56Sopenharmony_ci
16687db96d56Sopenharmony_ci   Send data to the socket.  The socket must be connected to a remote socket.  The
16697db96d56Sopenharmony_ci   optional *flags* argument has the same meaning as for :meth:`recv` above.
16707db96d56Sopenharmony_ci   Returns the number of bytes sent. Applications are responsible for checking that
16717db96d56Sopenharmony_ci   all data has been sent; if only some of the data was transmitted, the
16727db96d56Sopenharmony_ci   application needs to attempt delivery of the remaining data. For further
16737db96d56Sopenharmony_ci   information on this topic, consult the :ref:`socket-howto`.
16747db96d56Sopenharmony_ci
16757db96d56Sopenharmony_ci   .. versionchanged:: 3.5
16767db96d56Sopenharmony_ci      If the system call is interrupted and the signal handler does not raise
16777db96d56Sopenharmony_ci      an exception, the method now retries the system call instead of raising
16787db96d56Sopenharmony_ci      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
16797db96d56Sopenharmony_ci
16807db96d56Sopenharmony_ci
16817db96d56Sopenharmony_ci.. method:: socket.sendall(bytes[, flags])
16827db96d56Sopenharmony_ci
16837db96d56Sopenharmony_ci   Send data to the socket.  The socket must be connected to a remote socket.  The
16847db96d56Sopenharmony_ci   optional *flags* argument has the same meaning as for :meth:`recv` above.
16857db96d56Sopenharmony_ci   Unlike :meth:`send`, this method continues to send data from *bytes* until
16867db96d56Sopenharmony_ci   either all data has been sent or an error occurs.  ``None`` is returned on
16877db96d56Sopenharmony_ci   success.  On error, an exception is raised, and there is no way to determine how
16887db96d56Sopenharmony_ci   much data, if any, was successfully sent.
16897db96d56Sopenharmony_ci
16907db96d56Sopenharmony_ci   .. versionchanged:: 3.5
16917db96d56Sopenharmony_ci      The socket timeout is no longer reset each time data is sent successfully.
16927db96d56Sopenharmony_ci      The socket timeout is now the maximum total duration to send all data.
16937db96d56Sopenharmony_ci
16947db96d56Sopenharmony_ci   .. versionchanged:: 3.5
16957db96d56Sopenharmony_ci      If the system call is interrupted and the signal handler does not raise
16967db96d56Sopenharmony_ci      an exception, the method now retries the system call instead of raising
16977db96d56Sopenharmony_ci      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
16987db96d56Sopenharmony_ci
16997db96d56Sopenharmony_ci
17007db96d56Sopenharmony_ci.. method:: socket.sendto(bytes, address)
17017db96d56Sopenharmony_ci            socket.sendto(bytes, flags, address)
17027db96d56Sopenharmony_ci
17037db96d56Sopenharmony_ci   Send data to the socket.  The socket should not be connected to a remote socket,
17047db96d56Sopenharmony_ci   since the destination socket is specified by *address*.  The optional *flags*
17057db96d56Sopenharmony_ci   argument has the same meaning as for :meth:`recv` above.  Return the number of
17067db96d56Sopenharmony_ci   bytes sent. (The format of *address* depends on the address family --- see
17077db96d56Sopenharmony_ci   above.)
17087db96d56Sopenharmony_ci
17097db96d56Sopenharmony_ci   .. audit-event:: socket.sendto self,address socket.socket.sendto
17107db96d56Sopenharmony_ci
17117db96d56Sopenharmony_ci   .. versionchanged:: 3.5
17127db96d56Sopenharmony_ci      If the system call is interrupted and the signal handler does not raise
17137db96d56Sopenharmony_ci      an exception, the method now retries the system call instead of raising
17147db96d56Sopenharmony_ci      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
17157db96d56Sopenharmony_ci
17167db96d56Sopenharmony_ci
17177db96d56Sopenharmony_ci.. method:: socket.sendmsg(buffers[, ancdata[, flags[, address]]])
17187db96d56Sopenharmony_ci
17197db96d56Sopenharmony_ci   Send normal and ancillary data to the socket, gathering the
17207db96d56Sopenharmony_ci   non-ancillary data from a series of buffers and concatenating it
17217db96d56Sopenharmony_ci   into a single message.  The *buffers* argument specifies the
17227db96d56Sopenharmony_ci   non-ancillary data as an iterable of
17237db96d56Sopenharmony_ci   :term:`bytes-like objects <bytes-like object>`
17247db96d56Sopenharmony_ci   (e.g. :class:`bytes` objects); the operating system may set a limit
17257db96d56Sopenharmony_ci   (:func:`~os.sysconf` value ``SC_IOV_MAX``) on the number of buffers
17267db96d56Sopenharmony_ci   that can be used.  The *ancdata* argument specifies the ancillary
17277db96d56Sopenharmony_ci   data (control messages) as an iterable of zero or more tuples
17287db96d56Sopenharmony_ci   ``(cmsg_level, cmsg_type, cmsg_data)``, where *cmsg_level* and
17297db96d56Sopenharmony_ci   *cmsg_type* are integers specifying the protocol level and
17307db96d56Sopenharmony_ci   protocol-specific type respectively, and *cmsg_data* is a
17317db96d56Sopenharmony_ci   bytes-like object holding the associated data.  Note that
17327db96d56Sopenharmony_ci   some systems (in particular, systems without :func:`CMSG_SPACE`)
17337db96d56Sopenharmony_ci   might support sending only one control message per call.  The
17347db96d56Sopenharmony_ci   *flags* argument defaults to 0 and has the same meaning as for
17357db96d56Sopenharmony_ci   :meth:`send`.  If *address* is supplied and not ``None``, it sets a
17367db96d56Sopenharmony_ci   destination address for the message.  The return value is the
17377db96d56Sopenharmony_ci   number of bytes of non-ancillary data sent.
17387db96d56Sopenharmony_ci
17397db96d56Sopenharmony_ci   The following function sends the list of file descriptors *fds*
17407db96d56Sopenharmony_ci   over an :const:`AF_UNIX` socket, on systems which support the
17417db96d56Sopenharmony_ci   :const:`SCM_RIGHTS` mechanism.  See also :meth:`recvmsg`. ::
17427db96d56Sopenharmony_ci
17437db96d56Sopenharmony_ci      import socket, array
17447db96d56Sopenharmony_ci
17457db96d56Sopenharmony_ci      def send_fds(sock, msg, fds):
17467db96d56Sopenharmony_ci          return sock.sendmsg([msg], [(socket.SOL_SOCKET, socket.SCM_RIGHTS, array.array("i", fds))])
17477db96d56Sopenharmony_ci
17487db96d56Sopenharmony_ci   .. availability:: Unix, not WASI.
17497db96d56Sopenharmony_ci
17507db96d56Sopenharmony_ci      Most Unix platforms.
17517db96d56Sopenharmony_ci
17527db96d56Sopenharmony_ci   .. audit-event:: socket.sendmsg self,address socket.socket.sendmsg
17537db96d56Sopenharmony_ci
17547db96d56Sopenharmony_ci   .. versionadded:: 3.3
17557db96d56Sopenharmony_ci
17567db96d56Sopenharmony_ci   .. versionchanged:: 3.5
17577db96d56Sopenharmony_ci      If the system call is interrupted and the signal handler does not raise
17587db96d56Sopenharmony_ci      an exception, the method now retries the system call instead of raising
17597db96d56Sopenharmony_ci      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
17607db96d56Sopenharmony_ci
17617db96d56Sopenharmony_ci.. method:: socket.sendmsg_afalg([msg], *, op[, iv[, assoclen[, flags]]])
17627db96d56Sopenharmony_ci
17637db96d56Sopenharmony_ci   Specialized version of :meth:`~socket.sendmsg` for :const:`AF_ALG` socket.
17647db96d56Sopenharmony_ci   Set mode, IV, AEAD associated data length and flags for :const:`AF_ALG` socket.
17657db96d56Sopenharmony_ci
17667db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.38.
17677db96d56Sopenharmony_ci
17687db96d56Sopenharmony_ci   .. versionadded:: 3.6
17697db96d56Sopenharmony_ci
17707db96d56Sopenharmony_ci.. method:: socket.sendfile(file, offset=0, count=None)
17717db96d56Sopenharmony_ci
17727db96d56Sopenharmony_ci   Send a file until EOF is reached by using high-performance
17737db96d56Sopenharmony_ci   :mod:`os.sendfile` and return the total number of bytes which were sent.
17747db96d56Sopenharmony_ci   *file* must be a regular file object opened in binary mode. If
17757db96d56Sopenharmony_ci   :mod:`os.sendfile` is not available (e.g. Windows) or *file* is not a
17767db96d56Sopenharmony_ci   regular file :meth:`send` will be used instead. *offset* tells from where to
17777db96d56Sopenharmony_ci   start reading the file. If specified, *count* is the total number of bytes
17787db96d56Sopenharmony_ci   to transmit as opposed to sending the file until EOF is reached. File
17797db96d56Sopenharmony_ci   position is updated on return or also in case of error in which case
17807db96d56Sopenharmony_ci   :meth:`file.tell() <io.IOBase.tell>` can be used to figure out the number of
17817db96d56Sopenharmony_ci   bytes which were sent. The socket must be of :const:`SOCK_STREAM` type.
17827db96d56Sopenharmony_ci   Non-blocking sockets are not supported.
17837db96d56Sopenharmony_ci
17847db96d56Sopenharmony_ci   .. versionadded:: 3.5
17857db96d56Sopenharmony_ci
17867db96d56Sopenharmony_ci.. method:: socket.set_inheritable(inheritable)
17877db96d56Sopenharmony_ci
17887db96d56Sopenharmony_ci   Set the :ref:`inheritable flag <fd_inheritance>` of the socket's file
17897db96d56Sopenharmony_ci   descriptor or socket's handle.
17907db96d56Sopenharmony_ci
17917db96d56Sopenharmony_ci   .. versionadded:: 3.4
17927db96d56Sopenharmony_ci
17937db96d56Sopenharmony_ci
17947db96d56Sopenharmony_ci.. method:: socket.setblocking(flag)
17957db96d56Sopenharmony_ci
17967db96d56Sopenharmony_ci   Set blocking or non-blocking mode of the socket: if *flag* is false, the
17977db96d56Sopenharmony_ci   socket is set to non-blocking, else to blocking mode.
17987db96d56Sopenharmony_ci
17997db96d56Sopenharmony_ci   This method is a shorthand for certain :meth:`~socket.settimeout` calls:
18007db96d56Sopenharmony_ci
18017db96d56Sopenharmony_ci   * ``sock.setblocking(True)`` is equivalent to ``sock.settimeout(None)``
18027db96d56Sopenharmony_ci
18037db96d56Sopenharmony_ci   * ``sock.setblocking(False)`` is equivalent to ``sock.settimeout(0.0)``
18047db96d56Sopenharmony_ci
18057db96d56Sopenharmony_ci   .. versionchanged:: 3.7
18067db96d56Sopenharmony_ci      The method no longer applies :const:`SOCK_NONBLOCK` flag on
18077db96d56Sopenharmony_ci      :attr:`socket.type`.
18087db96d56Sopenharmony_ci
18097db96d56Sopenharmony_ci
18107db96d56Sopenharmony_ci.. method:: socket.settimeout(value)
18117db96d56Sopenharmony_ci
18127db96d56Sopenharmony_ci   Set a timeout on blocking socket operations.  The *value* argument can be a
18137db96d56Sopenharmony_ci   nonnegative floating point number expressing seconds, or ``None``.
18147db96d56Sopenharmony_ci   If a non-zero value is given, subsequent socket operations will raise a
18157db96d56Sopenharmony_ci   :exc:`timeout` exception if the timeout period *value* has elapsed before
18167db96d56Sopenharmony_ci   the operation has completed.  If zero is given, the socket is put in
18177db96d56Sopenharmony_ci   non-blocking mode. If ``None`` is given, the socket is put in blocking mode.
18187db96d56Sopenharmony_ci
18197db96d56Sopenharmony_ci   For further information, please consult the :ref:`notes on socket timeouts <socket-timeouts>`.
18207db96d56Sopenharmony_ci
18217db96d56Sopenharmony_ci   .. versionchanged:: 3.7
18227db96d56Sopenharmony_ci      The method no longer toggles :const:`SOCK_NONBLOCK` flag on
18237db96d56Sopenharmony_ci      :attr:`socket.type`.
18247db96d56Sopenharmony_ci
18257db96d56Sopenharmony_ci
18267db96d56Sopenharmony_ci.. method:: socket.setsockopt(level, optname, value: int)
18277db96d56Sopenharmony_ci.. method:: socket.setsockopt(level, optname, value: buffer)
18287db96d56Sopenharmony_ci   :noindex:
18297db96d56Sopenharmony_ci.. method:: socket.setsockopt(level, optname, None, optlen: int)
18307db96d56Sopenharmony_ci   :noindex:
18317db96d56Sopenharmony_ci
18327db96d56Sopenharmony_ci   .. index:: pair: module; struct
18337db96d56Sopenharmony_ci
18347db96d56Sopenharmony_ci   Set the value of the given socket option (see the Unix manual page
18357db96d56Sopenharmony_ci   :manpage:`setsockopt(2)`).  The needed symbolic constants are defined in the
18367db96d56Sopenharmony_ci   :mod:`socket` module (:const:`SO_\*` etc.).  The value can be an integer,
18377db96d56Sopenharmony_ci   ``None`` or a :term:`bytes-like object` representing a buffer. In the later
18387db96d56Sopenharmony_ci   case it is up to the caller to ensure that the bytestring contains the
18397db96d56Sopenharmony_ci   proper bits (see the optional built-in module :mod:`struct` for a way to
18407db96d56Sopenharmony_ci   encode C structures as bytestrings). When *value* is set to ``None``,
18417db96d56Sopenharmony_ci   *optlen* argument is required. It's equivalent to call :c:func:`setsockopt` C
18427db96d56Sopenharmony_ci   function with ``optval=NULL`` and ``optlen=optlen``.
18437db96d56Sopenharmony_ci
18447db96d56Sopenharmony_ci   .. versionchanged:: 3.5
18457db96d56Sopenharmony_ci      Writable :term:`bytes-like object` is now accepted.
18467db96d56Sopenharmony_ci
18477db96d56Sopenharmony_ci   .. versionchanged:: 3.6
18487db96d56Sopenharmony_ci      setsockopt(level, optname, None, optlen: int) form added.
18497db96d56Sopenharmony_ci
18507db96d56Sopenharmony_ci   .. availability:: not WASI.
18517db96d56Sopenharmony_ci
18527db96d56Sopenharmony_ci
18537db96d56Sopenharmony_ci.. method:: socket.shutdown(how)
18547db96d56Sopenharmony_ci
18557db96d56Sopenharmony_ci   Shut down one or both halves of the connection.  If *how* is :const:`SHUT_RD`,
18567db96d56Sopenharmony_ci   further receives are disallowed.  If *how* is :const:`SHUT_WR`, further sends
18577db96d56Sopenharmony_ci   are disallowed.  If *how* is :const:`SHUT_RDWR`, further sends and receives are
18587db96d56Sopenharmony_ci   disallowed.
18597db96d56Sopenharmony_ci
18607db96d56Sopenharmony_ci   .. availability:: not WASI.
18617db96d56Sopenharmony_ci
18627db96d56Sopenharmony_ci
18637db96d56Sopenharmony_ci.. method:: socket.share(process_id)
18647db96d56Sopenharmony_ci
18657db96d56Sopenharmony_ci   Duplicate a socket and prepare it for sharing with a target process.  The
18667db96d56Sopenharmony_ci   target process must be provided with *process_id*.  The resulting bytes object
18677db96d56Sopenharmony_ci   can then be passed to the target process using some form of interprocess
18687db96d56Sopenharmony_ci   communication and the socket can be recreated there using :func:`fromshare`.
18697db96d56Sopenharmony_ci   Once this method has been called, it is safe to close the socket since
18707db96d56Sopenharmony_ci   the operating system has already duplicated it for the target process.
18717db96d56Sopenharmony_ci
18727db96d56Sopenharmony_ci   .. availability:: Windows.
18737db96d56Sopenharmony_ci
18747db96d56Sopenharmony_ci   .. versionadded:: 3.3
18757db96d56Sopenharmony_ci
18767db96d56Sopenharmony_ci
18777db96d56Sopenharmony_ciNote that there are no methods :meth:`read` or :meth:`write`; use
18787db96d56Sopenharmony_ci:meth:`~socket.recv` and :meth:`~socket.send` without *flags* argument instead.
18797db96d56Sopenharmony_ci
18807db96d56Sopenharmony_ciSocket objects also have these (read-only) attributes that correspond to the
18817db96d56Sopenharmony_civalues given to the :class:`~socket.socket` constructor.
18827db96d56Sopenharmony_ci
18837db96d56Sopenharmony_ci
18847db96d56Sopenharmony_ci.. attribute:: socket.family
18857db96d56Sopenharmony_ci
18867db96d56Sopenharmony_ci   The socket family.
18877db96d56Sopenharmony_ci
18887db96d56Sopenharmony_ci
18897db96d56Sopenharmony_ci.. attribute:: socket.type
18907db96d56Sopenharmony_ci
18917db96d56Sopenharmony_ci   The socket type.
18927db96d56Sopenharmony_ci
18937db96d56Sopenharmony_ci
18947db96d56Sopenharmony_ci.. attribute:: socket.proto
18957db96d56Sopenharmony_ci
18967db96d56Sopenharmony_ci   The socket protocol.
18977db96d56Sopenharmony_ci
18987db96d56Sopenharmony_ci
18997db96d56Sopenharmony_ci
19007db96d56Sopenharmony_ci.. _socket-timeouts:
19017db96d56Sopenharmony_ci
19027db96d56Sopenharmony_ciNotes on socket timeouts
19037db96d56Sopenharmony_ci------------------------
19047db96d56Sopenharmony_ci
19057db96d56Sopenharmony_ciA socket object can be in one of three modes: blocking, non-blocking, or
19067db96d56Sopenharmony_citimeout.  Sockets are by default always created in blocking mode, but this
19077db96d56Sopenharmony_cican be changed by calling :func:`setdefaulttimeout`.
19087db96d56Sopenharmony_ci
19097db96d56Sopenharmony_ci* In *blocking mode*, operations block until complete or the system returns
19107db96d56Sopenharmony_ci  an error (such as connection timed out).
19117db96d56Sopenharmony_ci
19127db96d56Sopenharmony_ci* In *non-blocking mode*, operations fail (with an error that is unfortunately
19137db96d56Sopenharmony_ci  system-dependent) if they cannot be completed immediately: functions from the
19147db96d56Sopenharmony_ci  :mod:`select` module can be used to know when and whether a socket is available
19157db96d56Sopenharmony_ci  for reading or writing.
19167db96d56Sopenharmony_ci
19177db96d56Sopenharmony_ci* In *timeout mode*, operations fail if they cannot be completed within the
19187db96d56Sopenharmony_ci  timeout specified for the socket (they raise a :exc:`timeout` exception)
19197db96d56Sopenharmony_ci  or if the system returns an error.
19207db96d56Sopenharmony_ci
19217db96d56Sopenharmony_ci.. note::
19227db96d56Sopenharmony_ci   At the operating system level, sockets in *timeout mode* are internally set
19237db96d56Sopenharmony_ci   in non-blocking mode.  Also, the blocking and timeout modes are shared between
19247db96d56Sopenharmony_ci   file descriptors and socket objects that refer to the same network endpoint.
19257db96d56Sopenharmony_ci   This implementation detail can have visible consequences if e.g. you decide
19267db96d56Sopenharmony_ci   to use the :meth:`~socket.fileno()` of a socket.
19277db96d56Sopenharmony_ci
19287db96d56Sopenharmony_ciTimeouts and the ``connect`` method
19297db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19307db96d56Sopenharmony_ci
19317db96d56Sopenharmony_ciThe :meth:`~socket.connect` operation is also subject to the timeout
19327db96d56Sopenharmony_cisetting, and in general it is recommended to call :meth:`~socket.settimeout`
19337db96d56Sopenharmony_cibefore calling :meth:`~socket.connect` or pass a timeout parameter to
19347db96d56Sopenharmony_ci:meth:`create_connection`.  However, the system network stack may also
19357db96d56Sopenharmony_cireturn a connection timeout error of its own regardless of any Python socket
19367db96d56Sopenharmony_citimeout setting.
19377db96d56Sopenharmony_ci
19387db96d56Sopenharmony_ciTimeouts and the ``accept`` method
19397db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
19407db96d56Sopenharmony_ci
19417db96d56Sopenharmony_ciIf :func:`getdefaulttimeout` is not :const:`None`, sockets returned by
19427db96d56Sopenharmony_cithe :meth:`~socket.accept` method inherit that timeout.  Otherwise, the
19437db96d56Sopenharmony_cibehaviour depends on settings of the listening socket:
19447db96d56Sopenharmony_ci
19457db96d56Sopenharmony_ci* if the listening socket is in *blocking mode* or in *timeout mode*,
19467db96d56Sopenharmony_ci  the socket returned by :meth:`~socket.accept` is in *blocking mode*;
19477db96d56Sopenharmony_ci
19487db96d56Sopenharmony_ci* if the listening socket is in *non-blocking mode*, whether the socket
19497db96d56Sopenharmony_ci  returned by :meth:`~socket.accept` is in blocking or non-blocking mode
19507db96d56Sopenharmony_ci  is operating system-dependent.  If you want to ensure cross-platform
19517db96d56Sopenharmony_ci  behaviour, it is recommended you manually override this setting.
19527db96d56Sopenharmony_ci
19537db96d56Sopenharmony_ci
19547db96d56Sopenharmony_ci.. _socket-example:
19557db96d56Sopenharmony_ci
19567db96d56Sopenharmony_ciExample
19577db96d56Sopenharmony_ci-------
19587db96d56Sopenharmony_ci
19597db96d56Sopenharmony_ciHere are four minimal example programs using the TCP/IP protocol: a server that
19607db96d56Sopenharmony_ciechoes all data that it receives back (servicing only one client), and a client
19617db96d56Sopenharmony_ciusing it.  Note that a server must perform the sequence :func:`.socket`,
19627db96d56Sopenharmony_ci:meth:`~socket.bind`, :meth:`~socket.listen`, :meth:`~socket.accept` (possibly
19637db96d56Sopenharmony_cirepeating the :meth:`~socket.accept` to service more than one client), while a
19647db96d56Sopenharmony_ciclient only needs the sequence :func:`.socket`, :meth:`~socket.connect`.  Also
19657db96d56Sopenharmony_cinote that the server does not :meth:`~socket.sendall`/:meth:`~socket.recv` on
19667db96d56Sopenharmony_cithe socket it is listening on but on the new socket returned by
19677db96d56Sopenharmony_ci:meth:`~socket.accept`.
19687db96d56Sopenharmony_ci
19697db96d56Sopenharmony_ciThe first two examples support IPv4 only. ::
19707db96d56Sopenharmony_ci
19717db96d56Sopenharmony_ci   # Echo server program
19727db96d56Sopenharmony_ci   import socket
19737db96d56Sopenharmony_ci
19747db96d56Sopenharmony_ci   HOST = ''                 # Symbolic name meaning all available interfaces
19757db96d56Sopenharmony_ci   PORT = 50007              # Arbitrary non-privileged port
19767db96d56Sopenharmony_ci   with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
19777db96d56Sopenharmony_ci       s.bind((HOST, PORT))
19787db96d56Sopenharmony_ci       s.listen(1)
19797db96d56Sopenharmony_ci       conn, addr = s.accept()
19807db96d56Sopenharmony_ci       with conn:
19817db96d56Sopenharmony_ci           print('Connected by', addr)
19827db96d56Sopenharmony_ci           while True:
19837db96d56Sopenharmony_ci               data = conn.recv(1024)
19847db96d56Sopenharmony_ci               if not data: break
19857db96d56Sopenharmony_ci               conn.sendall(data)
19867db96d56Sopenharmony_ci
19877db96d56Sopenharmony_ci::
19887db96d56Sopenharmony_ci
19897db96d56Sopenharmony_ci   # Echo client program
19907db96d56Sopenharmony_ci   import socket
19917db96d56Sopenharmony_ci
19927db96d56Sopenharmony_ci   HOST = 'daring.cwi.nl'    # The remote host
19937db96d56Sopenharmony_ci   PORT = 50007              # The same port as used by the server
19947db96d56Sopenharmony_ci   with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
19957db96d56Sopenharmony_ci       s.connect((HOST, PORT))
19967db96d56Sopenharmony_ci       s.sendall(b'Hello, world')
19977db96d56Sopenharmony_ci       data = s.recv(1024)
19987db96d56Sopenharmony_ci   print('Received', repr(data))
19997db96d56Sopenharmony_ci
20007db96d56Sopenharmony_ciThe next two examples are identical to the above two, but support both IPv4 and
20017db96d56Sopenharmony_ciIPv6. The server side will listen to the first address family available (it
20027db96d56Sopenharmony_cishould listen to both instead). On most of IPv6-ready systems, IPv6 will take
20037db96d56Sopenharmony_ciprecedence and the server may not accept IPv4 traffic. The client side will try
20047db96d56Sopenharmony_cito connect to the all addresses returned as a result of the name resolution, and
20057db96d56Sopenharmony_cisends traffic to the first one connected successfully. ::
20067db96d56Sopenharmony_ci
20077db96d56Sopenharmony_ci   # Echo server program
20087db96d56Sopenharmony_ci   import socket
20097db96d56Sopenharmony_ci   import sys
20107db96d56Sopenharmony_ci
20117db96d56Sopenharmony_ci   HOST = None               # Symbolic name meaning all available interfaces
20127db96d56Sopenharmony_ci   PORT = 50007              # Arbitrary non-privileged port
20137db96d56Sopenharmony_ci   s = None
20147db96d56Sopenharmony_ci   for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,
20157db96d56Sopenharmony_ci                                 socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
20167db96d56Sopenharmony_ci       af, socktype, proto, canonname, sa = res
20177db96d56Sopenharmony_ci       try:
20187db96d56Sopenharmony_ci           s = socket.socket(af, socktype, proto)
20197db96d56Sopenharmony_ci       except OSError as msg:
20207db96d56Sopenharmony_ci           s = None
20217db96d56Sopenharmony_ci           continue
20227db96d56Sopenharmony_ci       try:
20237db96d56Sopenharmony_ci           s.bind(sa)
20247db96d56Sopenharmony_ci           s.listen(1)
20257db96d56Sopenharmony_ci       except OSError as msg:
20267db96d56Sopenharmony_ci           s.close()
20277db96d56Sopenharmony_ci           s = None
20287db96d56Sopenharmony_ci           continue
20297db96d56Sopenharmony_ci       break
20307db96d56Sopenharmony_ci   if s is None:
20317db96d56Sopenharmony_ci       print('could not open socket')
20327db96d56Sopenharmony_ci       sys.exit(1)
20337db96d56Sopenharmony_ci   conn, addr = s.accept()
20347db96d56Sopenharmony_ci   with conn:
20357db96d56Sopenharmony_ci       print('Connected by', addr)
20367db96d56Sopenharmony_ci       while True:
20377db96d56Sopenharmony_ci           data = conn.recv(1024)
20387db96d56Sopenharmony_ci           if not data: break
20397db96d56Sopenharmony_ci           conn.send(data)
20407db96d56Sopenharmony_ci
20417db96d56Sopenharmony_ci::
20427db96d56Sopenharmony_ci
20437db96d56Sopenharmony_ci   # Echo client program
20447db96d56Sopenharmony_ci   import socket
20457db96d56Sopenharmony_ci   import sys
20467db96d56Sopenharmony_ci
20477db96d56Sopenharmony_ci   HOST = 'daring.cwi.nl'    # The remote host
20487db96d56Sopenharmony_ci   PORT = 50007              # The same port as used by the server
20497db96d56Sopenharmony_ci   s = None
20507db96d56Sopenharmony_ci   for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
20517db96d56Sopenharmony_ci       af, socktype, proto, canonname, sa = res
20527db96d56Sopenharmony_ci       try:
20537db96d56Sopenharmony_ci           s = socket.socket(af, socktype, proto)
20547db96d56Sopenharmony_ci       except OSError as msg:
20557db96d56Sopenharmony_ci           s = None
20567db96d56Sopenharmony_ci           continue
20577db96d56Sopenharmony_ci       try:
20587db96d56Sopenharmony_ci           s.connect(sa)
20597db96d56Sopenharmony_ci       except OSError as msg:
20607db96d56Sopenharmony_ci           s.close()
20617db96d56Sopenharmony_ci           s = None
20627db96d56Sopenharmony_ci           continue
20637db96d56Sopenharmony_ci       break
20647db96d56Sopenharmony_ci   if s is None:
20657db96d56Sopenharmony_ci       print('could not open socket')
20667db96d56Sopenharmony_ci       sys.exit(1)
20677db96d56Sopenharmony_ci   with s:
20687db96d56Sopenharmony_ci       s.sendall(b'Hello, world')
20697db96d56Sopenharmony_ci       data = s.recv(1024)
20707db96d56Sopenharmony_ci   print('Received', repr(data))
20717db96d56Sopenharmony_ci
20727db96d56Sopenharmony_ciThe next example shows how to write a very simple network sniffer with raw
20737db96d56Sopenharmony_cisockets on Windows. The example requires administrator privileges to modify
20747db96d56Sopenharmony_cithe interface::
20757db96d56Sopenharmony_ci
20767db96d56Sopenharmony_ci   import socket
20777db96d56Sopenharmony_ci
20787db96d56Sopenharmony_ci   # the public network interface
20797db96d56Sopenharmony_ci   HOST = socket.gethostbyname(socket.gethostname())
20807db96d56Sopenharmony_ci
20817db96d56Sopenharmony_ci   # create a raw socket and bind it to the public interface
20827db96d56Sopenharmony_ci   s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
20837db96d56Sopenharmony_ci   s.bind((HOST, 0))
20847db96d56Sopenharmony_ci
20857db96d56Sopenharmony_ci   # Include IP headers
20867db96d56Sopenharmony_ci   s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
20877db96d56Sopenharmony_ci
20887db96d56Sopenharmony_ci   # receive all packets
20897db96d56Sopenharmony_ci   s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
20907db96d56Sopenharmony_ci
20917db96d56Sopenharmony_ci   # receive a packet
20927db96d56Sopenharmony_ci   print(s.recvfrom(65565))
20937db96d56Sopenharmony_ci
20947db96d56Sopenharmony_ci   # disabled promiscuous mode
20957db96d56Sopenharmony_ci   s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
20967db96d56Sopenharmony_ci
20977db96d56Sopenharmony_ciThe next example shows how to use the socket interface to communicate to a CAN
20987db96d56Sopenharmony_cinetwork using the raw socket protocol. To use CAN with the broadcast
20997db96d56Sopenharmony_cimanager protocol instead, open a socket with::
21007db96d56Sopenharmony_ci
21017db96d56Sopenharmony_ci    socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_BCM)
21027db96d56Sopenharmony_ci
21037db96d56Sopenharmony_ciAfter binding (:const:`CAN_RAW`) or connecting (:const:`CAN_BCM`) the socket, you
21047db96d56Sopenharmony_cican use the :meth:`socket.send` and :meth:`socket.recv` operations (and
21057db96d56Sopenharmony_citheir counterparts) on the socket object as usual.
21067db96d56Sopenharmony_ci
21077db96d56Sopenharmony_ciThis last example might require special privileges::
21087db96d56Sopenharmony_ci
21097db96d56Sopenharmony_ci   import socket
21107db96d56Sopenharmony_ci   import struct
21117db96d56Sopenharmony_ci
21127db96d56Sopenharmony_ci
21137db96d56Sopenharmony_ci   # CAN frame packing/unpacking (see 'struct can_frame' in <linux/can.h>)
21147db96d56Sopenharmony_ci
21157db96d56Sopenharmony_ci   can_frame_fmt = "=IB3x8s"
21167db96d56Sopenharmony_ci   can_frame_size = struct.calcsize(can_frame_fmt)
21177db96d56Sopenharmony_ci
21187db96d56Sopenharmony_ci   def build_can_frame(can_id, data):
21197db96d56Sopenharmony_ci       can_dlc = len(data)
21207db96d56Sopenharmony_ci       data = data.ljust(8, b'\x00')
21217db96d56Sopenharmony_ci       return struct.pack(can_frame_fmt, can_id, can_dlc, data)
21227db96d56Sopenharmony_ci
21237db96d56Sopenharmony_ci   def dissect_can_frame(frame):
21247db96d56Sopenharmony_ci       can_id, can_dlc, data = struct.unpack(can_frame_fmt, frame)
21257db96d56Sopenharmony_ci       return (can_id, can_dlc, data[:can_dlc])
21267db96d56Sopenharmony_ci
21277db96d56Sopenharmony_ci
21287db96d56Sopenharmony_ci   # create a raw socket and bind it to the 'vcan0' interface
21297db96d56Sopenharmony_ci   s = socket.socket(socket.AF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
21307db96d56Sopenharmony_ci   s.bind(('vcan0',))
21317db96d56Sopenharmony_ci
21327db96d56Sopenharmony_ci   while True:
21337db96d56Sopenharmony_ci       cf, addr = s.recvfrom(can_frame_size)
21347db96d56Sopenharmony_ci
21357db96d56Sopenharmony_ci       print('Received: can_id=%x, can_dlc=%x, data=%s' % dissect_can_frame(cf))
21367db96d56Sopenharmony_ci
21377db96d56Sopenharmony_ci       try:
21387db96d56Sopenharmony_ci           s.send(cf)
21397db96d56Sopenharmony_ci       except OSError:
21407db96d56Sopenharmony_ci           print('Error sending CAN frame')
21417db96d56Sopenharmony_ci
21427db96d56Sopenharmony_ci       try:
21437db96d56Sopenharmony_ci           s.send(build_can_frame(0x01, b'\x01\x02\x03'))
21447db96d56Sopenharmony_ci       except OSError:
21457db96d56Sopenharmony_ci           print('Error sending CAN frame')
21467db96d56Sopenharmony_ci
21477db96d56Sopenharmony_ciRunning an example several times with too small delay between executions, could
21487db96d56Sopenharmony_cilead to this error::
21497db96d56Sopenharmony_ci
21507db96d56Sopenharmony_ci   OSError: [Errno 98] Address already in use
21517db96d56Sopenharmony_ci
21527db96d56Sopenharmony_ciThis is because the previous execution has left the socket in a ``TIME_WAIT``
21537db96d56Sopenharmony_cistate, and can't be immediately reused.
21547db96d56Sopenharmony_ci
21557db96d56Sopenharmony_ciThere is a :mod:`socket` flag to set, in order to prevent this,
21567db96d56Sopenharmony_ci:data:`socket.SO_REUSEADDR`::
21577db96d56Sopenharmony_ci
21587db96d56Sopenharmony_ci   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
21597db96d56Sopenharmony_ci   s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
21607db96d56Sopenharmony_ci   s.bind((HOST, PORT))
21617db96d56Sopenharmony_ci
21627db96d56Sopenharmony_cithe :data:`SO_REUSEADDR` flag tells the kernel to reuse a local socket in
21637db96d56Sopenharmony_ci``TIME_WAIT`` state, without waiting for its natural timeout to expire.
21647db96d56Sopenharmony_ci
21657db96d56Sopenharmony_ci
21667db96d56Sopenharmony_ci.. seealso::
21677db96d56Sopenharmony_ci
21687db96d56Sopenharmony_ci   For an introduction to socket programming (in C), see the following papers:
21697db96d56Sopenharmony_ci
21707db96d56Sopenharmony_ci   - *An Introductory 4.3BSD Interprocess Communication Tutorial*, by Stuart Sechrest
21717db96d56Sopenharmony_ci
21727db96d56Sopenharmony_ci   - *An Advanced 4.3BSD Interprocess Communication Tutorial*, by Samuel J.  Leffler et
21737db96d56Sopenharmony_ci     al,
21747db96d56Sopenharmony_ci
21757db96d56Sopenharmony_ci   both in the UNIX Programmer's Manual, Supplementary Documents 1 (sections
21767db96d56Sopenharmony_ci   PS1:7 and PS1:8).  The platform-specific reference material for the various
21777db96d56Sopenharmony_ci   socket-related system calls are also a valuable source of information on the
21787db96d56Sopenharmony_ci   details of socket semantics.  For Unix, refer to the manual pages; for Windows,
21797db96d56Sopenharmony_ci   see the WinSock (or Winsock 2) specification.  For IPv6-ready APIs, readers may
21807db96d56Sopenharmony_ci   want to refer to :rfc:`3493` titled Basic Socket Interface Extensions for IPv6.
2181