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