mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 03:22:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			2307 lines
		
	
	
	
		
			84 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			2307 lines
		
	
	
	
		
			84 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
:mod:`!socket` --- Low-level networking interface
 | 
						|
=================================================
 | 
						|
 | 
						|
.. module:: socket
 | 
						|
   :synopsis: Low-level networking interface.
 | 
						|
 | 
						|
**Source code:** :source:`Lib/socket.py`
 | 
						|
 | 
						|
--------------
 | 
						|
 | 
						|
This module provides access to the BSD *socket* interface. It is available on
 | 
						|
all modern Unix systems, Windows, MacOS, and probably additional platforms.
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
   Some behavior may be platform dependent, since calls are made to the operating
 | 
						|
   system socket APIs.
 | 
						|
 | 
						|
 | 
						|
.. include:: ../includes/wasm-notavail.rst
 | 
						|
 | 
						|
.. index:: pair: object; socket
 | 
						|
 | 
						|
The Python interface is a straightforward transliteration of the Unix system
 | 
						|
call and library interface for sockets to Python's object-oriented style: the
 | 
						|
:func:`~socket.socket` function returns a :dfn:`socket object` whose methods implement
 | 
						|
the various socket system calls.  Parameter types are somewhat higher-level than
 | 
						|
in the C interface: as with :meth:`read` and :meth:`write` operations on Python
 | 
						|
files, buffer allocation on receive operations is automatic, and buffer length
 | 
						|
is implicit on send operations.
 | 
						|
 | 
						|
 | 
						|
.. seealso::
 | 
						|
 | 
						|
   Module :mod:`socketserver`
 | 
						|
      Classes that simplify writing network servers.
 | 
						|
 | 
						|
   Module :mod:`ssl`
 | 
						|
      A TLS/SSL wrapper for socket objects.
 | 
						|
 | 
						|
 | 
						|
Socket families
 | 
						|
---------------
 | 
						|
 | 
						|
Depending on the system and the build options, various socket families
 | 
						|
are supported by this module.
 | 
						|
 | 
						|
The address format required by a particular socket object is automatically
 | 
						|
selected based on the address family specified when the socket object was
 | 
						|
created.  Socket addresses are represented as follows:
 | 
						|
 | 
						|
- The address of an :const:`AF_UNIX` socket bound to a file system node
 | 
						|
  is represented as a string, using the file system encoding and the
 | 
						|
  ``'surrogateescape'`` error handler (see :pep:`383`).  An address in
 | 
						|
  Linux's abstract namespace is returned as a :term:`bytes-like object` with
 | 
						|
  an initial null byte; note that sockets in this namespace can
 | 
						|
  communicate with normal file system sockets, so programs intended to
 | 
						|
  run on Linux may need to deal with both types of address.  A string or
 | 
						|
  bytes-like object can be used for either type of address when
 | 
						|
  passing it as an argument.
 | 
						|
 | 
						|
  .. versionchanged:: 3.3
 | 
						|
     Previously, :const:`AF_UNIX` socket paths were assumed to use UTF-8
 | 
						|
     encoding.
 | 
						|
 | 
						|
  .. versionchanged:: 3.5
 | 
						|
     Writable :term:`bytes-like object` is now accepted.
 | 
						|
 | 
						|
.. _host_port:
 | 
						|
 | 
						|
- A pair ``(host, port)`` is used for the :const:`AF_INET` address family,
 | 
						|
  where *host* is a string representing either a hostname in internet domain
 | 
						|
  notation like ``'daring.cwi.nl'`` or an IPv4 address like ``'100.50.200.5'``,
 | 
						|
  and *port* is an integer.
 | 
						|
 | 
						|
  - For IPv4 addresses, two special forms are accepted instead of a host
 | 
						|
    address: ``''`` represents :const:`INADDR_ANY`, which is used to bind to all
 | 
						|
    interfaces, and the string ``'<broadcast>'`` represents
 | 
						|
    :const:`INADDR_BROADCAST`.  This behavior is not compatible with IPv6,
 | 
						|
    therefore, you may want to avoid these if you intend to support IPv6 with your
 | 
						|
    Python programs.
 | 
						|
 | 
						|
- For :const:`AF_INET6` address family, a four-tuple ``(host, port, flowinfo,
 | 
						|
  scope_id)`` is used, where *flowinfo* and *scope_id* represent the ``sin6_flowinfo``
 | 
						|
  and ``sin6_scope_id`` members in :const:`struct sockaddr_in6` in C.  For
 | 
						|
  :mod:`socket` module methods, *flowinfo* and *scope_id* can be omitted just for
 | 
						|
  backward compatibility.  Note, however, omission of *scope_id* can cause problems
 | 
						|
  in manipulating scoped IPv6 addresses.
 | 
						|
 | 
						|
  .. versionchanged:: 3.7
 | 
						|
     For multicast addresses (with *scope_id* meaningful) *address* may not contain
 | 
						|
     ``%scope_id`` (or ``zone id``) part. This information is superfluous and may
 | 
						|
     be safely omitted (recommended).
 | 
						|
 | 
						|
- :const:`AF_NETLINK` sockets are represented as pairs ``(pid, groups)``.
 | 
						|
 | 
						|
- Linux-only support for TIPC is available using the :const:`AF_TIPC`
 | 
						|
  address family.  TIPC is an open, non-IP based networked protocol designed
 | 
						|
  for use in clustered computer environments.  Addresses are represented by a
 | 
						|
  tuple, and the fields depend on the address type. The general tuple form is
 | 
						|
  ``(addr_type, v1, v2, v3 [, scope])``, where:
 | 
						|
 | 
						|
  - *addr_type* is one of :const:`TIPC_ADDR_NAMESEQ`, :const:`TIPC_ADDR_NAME`,
 | 
						|
    or :const:`TIPC_ADDR_ID`.
 | 
						|
  - *scope* is one of :const:`TIPC_ZONE_SCOPE`, :const:`TIPC_CLUSTER_SCOPE`, and
 | 
						|
    :const:`TIPC_NODE_SCOPE`.
 | 
						|
  - If *addr_type* is :const:`TIPC_ADDR_NAME`, then *v1* is the server type, *v2* is
 | 
						|
    the port identifier, and *v3* should be 0.
 | 
						|
 | 
						|
    If *addr_type* is :const:`TIPC_ADDR_NAMESEQ`, then *v1* is the server type, *v2*
 | 
						|
    is the lower port number, and *v3* is the upper port number.
 | 
						|
 | 
						|
    If *addr_type* is :const:`TIPC_ADDR_ID`, then *v1* is the node, *v2* is the
 | 
						|
    reference, and *v3* should be set to 0.
 | 
						|
 | 
						|
- A tuple ``(interface, )`` is used for the :const:`AF_CAN` address family,
 | 
						|
  where *interface* is a string representing a network interface name like
 | 
						|
  ``'can0'``. The network interface name ``''`` can be used to receive packets
 | 
						|
  from all network interfaces of this family.
 | 
						|
 | 
						|
  - :const:`CAN_ISOTP` protocol require a tuple ``(interface, rx_addr, tx_addr)``
 | 
						|
    where both additional parameters are unsigned long integer that represent a
 | 
						|
    CAN identifier (standard or extended).
 | 
						|
  - :const:`CAN_J1939` protocol require a tuple ``(interface, name, pgn, addr)``
 | 
						|
    where additional parameters are 64-bit unsigned integer representing the
 | 
						|
    ECU name, a 32-bit unsigned integer representing the Parameter Group Number
 | 
						|
    (PGN), and an 8-bit integer representing the address.
 | 
						|
 | 
						|
- A string or a tuple ``(id, unit)`` is used for the :const:`SYSPROTO_CONTROL`
 | 
						|
  protocol of the :const:`PF_SYSTEM` family. The string is the name of a
 | 
						|
  kernel control using a dynamically assigned ID. The tuple can be used if ID
 | 
						|
  and unit number of the kernel control are known or if a registered ID is
 | 
						|
  used.
 | 
						|
 | 
						|
  .. versionadded:: 3.3
 | 
						|
 | 
						|
- :const:`AF_BLUETOOTH` supports the following protocols and address
 | 
						|
  formats:
 | 
						|
 | 
						|
  - :const:`BTPROTO_L2CAP` accepts ``(bdaddr, psm)`` where ``bdaddr`` is
 | 
						|
    the Bluetooth address as a string and ``psm`` is an integer.
 | 
						|
 | 
						|
  - :const:`BTPROTO_RFCOMM` accepts ``(bdaddr, channel)`` where ``bdaddr``
 | 
						|
    is the Bluetooth address as a string and ``channel`` is an integer.
 | 
						|
 | 
						|
  - :const:`BTPROTO_HCI` accepts ``(device_id,)`` where ``device_id`` is
 | 
						|
    either an integer or a string with the Bluetooth address of the
 | 
						|
    interface. (This depends on your OS; NetBSD and DragonFlyBSD expect
 | 
						|
    a Bluetooth address while everything else expects an integer.)
 | 
						|
 | 
						|
    .. versionchanged:: 3.2
 | 
						|
       NetBSD and DragonFlyBSD support added.
 | 
						|
 | 
						|
  - :const:`BTPROTO_SCO` accepts ``bdaddr`` where ``bdaddr`` is a
 | 
						|
    :class:`bytes` object containing the Bluetooth address in a
 | 
						|
    string format. (ex. ``b'12:23:34:45:56:67'``) This protocol is not
 | 
						|
    supported under FreeBSD.
 | 
						|
 | 
						|
- :const:`AF_ALG` is a Linux-only socket based interface to Kernel
 | 
						|
  cryptography. An algorithm socket is configured with a tuple of two to four
 | 
						|
  elements ``(type, name [, feat [, mask]])``, where:
 | 
						|
 | 
						|
  - *type* is the algorithm type as string, e.g. ``aead``, ``hash``,
 | 
						|
    ``skcipher`` or ``rng``.
 | 
						|
 | 
						|
  - *name* is the algorithm name and operation mode as string, e.g.
 | 
						|
    ``sha256``, ``hmac(sha256)``, ``cbc(aes)`` or ``drbg_nopr_ctr_aes256``.
 | 
						|
 | 
						|
  - *feat* and *mask* are unsigned 32bit integers.
 | 
						|
 | 
						|
  .. availability:: Linux >= 2.6.38.
 | 
						|
 | 
						|
     Some algorithm types require more recent Kernels.
 | 
						|
 | 
						|
  .. versionadded:: 3.6
 | 
						|
 | 
						|
- :const:`AF_VSOCK` allows communication between virtual machines and
 | 
						|
  their hosts. The sockets are represented as a ``(CID, port)`` tuple
 | 
						|
  where the context ID or CID and port are integers.
 | 
						|
 | 
						|
  .. availability:: Linux >= 3.9
 | 
						|
 | 
						|
     See :manpage:`vsock(7)`
 | 
						|
 | 
						|
  .. versionadded:: 3.7
 | 
						|
 | 
						|
- :const:`AF_PACKET` is a low-level interface directly to network devices.
 | 
						|
  The addresses are represented by the tuple
 | 
						|
  ``(ifname, proto[, pkttype[, hatype[, addr]]])`` where:
 | 
						|
 | 
						|
  - *ifname* - String specifying the device name.
 | 
						|
  - *proto* - The Ethernet protocol number.
 | 
						|
    May be :data:`ETH_P_ALL` to capture all protocols,
 | 
						|
    one of the :ref:`ETHERTYPE_* constants <socket-ethernet-types>`
 | 
						|
    or any other Ethernet protocol number.
 | 
						|
  - *pkttype* - Optional integer specifying the packet type:
 | 
						|
 | 
						|
    - ``PACKET_HOST`` (the default) - Packet addressed to the local host.
 | 
						|
    - ``PACKET_BROADCAST`` - Physical-layer broadcast packet.
 | 
						|
    - ``PACKET_MULTICAST`` - Packet sent to a physical-layer multicast address.
 | 
						|
    - ``PACKET_OTHERHOST`` - Packet to some other host that has been caught by
 | 
						|
      a device driver in promiscuous mode.
 | 
						|
    - ``PACKET_OUTGOING`` - Packet originating from the local host that is
 | 
						|
      looped back to a packet socket.
 | 
						|
  - *hatype* - Optional integer specifying the ARP hardware address type.
 | 
						|
  - *addr* - Optional bytes-like object specifying the hardware physical
 | 
						|
    address, whose interpretation depends on the device.
 | 
						|
 | 
						|
  .. availability:: Linux >= 2.2.
 | 
						|
 | 
						|
- :const:`AF_QIPCRTR` is a Linux-only socket based interface for communicating
 | 
						|
  with services running on co-processors in Qualcomm platforms. The address
 | 
						|
  family is represented as a ``(node, port)`` tuple where the *node* and *port*
 | 
						|
  are non-negative integers.
 | 
						|
 | 
						|
  .. availability:: Linux >= 4.7.
 | 
						|
 | 
						|
  .. versionadded:: 3.8
 | 
						|
 | 
						|
- :const:`IPPROTO_UDPLITE` is a variant of UDP which allows you to specify
 | 
						|
  what portion of a packet is covered with the checksum. It adds two socket
 | 
						|
  options that you can change.
 | 
						|
  ``self.setsockopt(IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV, length)`` will
 | 
						|
  change what portion of outgoing packets are covered by the checksum and
 | 
						|
  ``self.setsockopt(IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV, length)`` will
 | 
						|
  filter out packets which cover too little of their data. In both cases
 | 
						|
  ``length`` should be in ``range(8, 2**16, 8)``.
 | 
						|
 | 
						|
  Such a socket should be constructed with
 | 
						|
  ``socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE)`` for IPv4 or
 | 
						|
  ``socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE)`` for IPv6.
 | 
						|
 | 
						|
  .. availability:: Linux >= 2.6.20, FreeBSD >= 10.1
 | 
						|
 | 
						|
  .. versionadded:: 3.9
 | 
						|
 | 
						|
- :const:`AF_HYPERV` is a Windows-only socket based interface for communicating
 | 
						|
  with Hyper-V hosts and guests. The address family is represented as a
 | 
						|
  ``(vm_id, service_id)`` tuple where the ``vm_id`` and ``service_id`` are
 | 
						|
  UUID strings.
 | 
						|
 | 
						|
  The ``vm_id`` is the virtual machine identifier or a set of known VMID values
 | 
						|
  if the target is not a specific virtual machine. Known VMID constants
 | 
						|
  defined on ``socket`` are:
 | 
						|
 | 
						|
  - ``HV_GUID_ZERO``
 | 
						|
  - ``HV_GUID_BROADCAST``
 | 
						|
  - ``HV_GUID_WILDCARD`` - Used to bind on itself and accept connections from
 | 
						|
    all partitions.
 | 
						|
  - ``HV_GUID_CHILDREN`` - Used to bind on itself and accept connection from
 | 
						|
    child partitions.
 | 
						|
  - ``HV_GUID_LOOPBACK`` - Used as a target to itself.
 | 
						|
  - ``HV_GUID_PARENT`` - When used as a bind accepts connection from the parent
 | 
						|
    partition. When used as an address target it will connect to the parent partition.
 | 
						|
 | 
						|
  The ``service_id`` is the service identifier of the registered service.
 | 
						|
 | 
						|
  .. versionadded:: 3.12
 | 
						|
 | 
						|
If you use a hostname in the *host* portion of IPv4/v6 socket address, the
 | 
						|
program may show a nondeterministic behavior, as Python uses the first address
 | 
						|
returned from the DNS resolution.  The socket address will be resolved
 | 
						|
differently into an actual IPv4/v6 address, depending on the results from DNS
 | 
						|
resolution and/or the host configuration.  For deterministic behavior use a
 | 
						|
numeric address in *host* portion.
 | 
						|
 | 
						|
All errors raise exceptions.  The normal exceptions for invalid argument types
 | 
						|
and out-of-memory conditions can be raised. Errors
 | 
						|
related to socket or address semantics raise :exc:`OSError` or one of its
 | 
						|
subclasses.
 | 
						|
 | 
						|
Non-blocking mode is supported through :meth:`~socket.setblocking`.  A
 | 
						|
generalization of this based on timeouts is supported through
 | 
						|
:meth:`~socket.settimeout`.
 | 
						|
 | 
						|
 | 
						|
Module contents
 | 
						|
---------------
 | 
						|
 | 
						|
The module :mod:`socket` exports the following elements.
 | 
						|
 | 
						|
 | 
						|
Exceptions
 | 
						|
^^^^^^^^^^
 | 
						|
 | 
						|
.. exception:: error
 | 
						|
 | 
						|
   A deprecated alias of :exc:`OSError`.
 | 
						|
 | 
						|
   .. versionchanged:: 3.3
 | 
						|
      Following :pep:`3151`, this class was made an alias of :exc:`OSError`.
 | 
						|
 | 
						|
 | 
						|
.. exception:: herror
 | 
						|
 | 
						|
   A subclass of :exc:`OSError`, this exception is raised for
 | 
						|
   address-related errors, i.e. for functions that use *h_errno* in the POSIX
 | 
						|
   C API, including :func:`gethostbyname_ex` and :func:`gethostbyaddr`.
 | 
						|
   The accompanying value is a pair ``(h_errno, string)`` representing an
 | 
						|
   error returned by a library call.  *h_errno* is a numeric value, while
 | 
						|
   *string* represents the description of *h_errno*, as returned by the
 | 
						|
   :c:func:`hstrerror` C function.
 | 
						|
 | 
						|
   .. versionchanged:: 3.3
 | 
						|
      This class was made a subclass of :exc:`OSError`.
 | 
						|
 | 
						|
.. exception:: gaierror
 | 
						|
 | 
						|
   A subclass of :exc:`OSError`, this exception is raised for
 | 
						|
   address-related errors by :func:`getaddrinfo` and :func:`getnameinfo`.
 | 
						|
   The accompanying value is a pair ``(error, string)`` representing an error
 | 
						|
   returned by a library call.  *string* represents the description of
 | 
						|
   *error*, as returned by the :c:func:`gai_strerror` C function.  The
 | 
						|
   numeric *error* value will match one of the :const:`!EAI_\*` constants
 | 
						|
   defined in this module.
 | 
						|
 | 
						|
   .. versionchanged:: 3.3
 | 
						|
      This class was made a subclass of :exc:`OSError`.
 | 
						|
 | 
						|
.. exception:: timeout
 | 
						|
 | 
						|
   A deprecated alias of :exc:`TimeoutError`.
 | 
						|
 | 
						|
   A subclass of :exc:`OSError`, this exception is raised when a timeout
 | 
						|
   occurs on a socket which has had timeouts enabled via a prior call to
 | 
						|
   :meth:`~socket.settimeout` (or implicitly through
 | 
						|
   :func:`~socket.setdefaulttimeout`).  The accompanying value is a string
 | 
						|
   whose value is currently always "timed out".
 | 
						|
 | 
						|
   .. versionchanged:: 3.3
 | 
						|
      This class was made a subclass of :exc:`OSError`.
 | 
						|
 | 
						|
   .. versionchanged:: 3.10
 | 
						|
      This class was made an alias of :exc:`TimeoutError`.
 | 
						|
 | 
						|
 | 
						|
Constants
 | 
						|
^^^^^^^^^
 | 
						|
 | 
						|
   The AF_* and SOCK_* constants are now :class:`AddressFamily` and
 | 
						|
   :class:`SocketKind` :class:`.IntEnum` collections.
 | 
						|
 | 
						|
   .. versionadded:: 3.4
 | 
						|
 | 
						|
.. data:: AF_UNIX
 | 
						|
          AF_INET
 | 
						|
          AF_INET6
 | 
						|
 | 
						|
   These constants represent the address (and protocol) families, used for the
 | 
						|
   first argument to :func:`~socket.socket`.  If the :const:`AF_UNIX` constant is not
 | 
						|
   defined then this protocol is unsupported.  More constants may be available
 | 
						|
   depending on the system.
 | 
						|
 | 
						|
.. data:: AF_UNSPEC
 | 
						|
 | 
						|
   :const:`AF_UNSPEC` means that
 | 
						|
   :func:`getaddrinfo` should return socket addresses for any
 | 
						|
   address family (either IPv4, IPv6, or any other) that can be used.
 | 
						|
 | 
						|
.. data:: SOCK_STREAM
 | 
						|
          SOCK_DGRAM
 | 
						|
          SOCK_RAW
 | 
						|
          SOCK_RDM
 | 
						|
          SOCK_SEQPACKET
 | 
						|
 | 
						|
   These constants represent the socket types, used for the second argument to
 | 
						|
   :func:`~socket.socket`.  More constants may be available depending on the system.
 | 
						|
   (Only :const:`SOCK_STREAM` and :const:`SOCK_DGRAM` appear to be generally
 | 
						|
   useful.)
 | 
						|
 | 
						|
.. data:: SOCK_CLOEXEC
 | 
						|
          SOCK_NONBLOCK
 | 
						|
 | 
						|
   These two constants, if defined, can be combined with the socket types and
 | 
						|
   allow you to set some flags atomically (thus avoiding possible race
 | 
						|
   conditions and the need for separate calls).
 | 
						|
 | 
						|
   .. seealso::
 | 
						|
 | 
						|
      `Secure File Descriptor Handling <https://udrepper.livejournal.com/20407.html>`_
 | 
						|
      for a more thorough explanation.
 | 
						|
 | 
						|
   .. availability:: Linux >= 2.6.27.
 | 
						|
 | 
						|
   .. versionadded:: 3.2
 | 
						|
 | 
						|
.. _socket-unix-constants:
 | 
						|
 | 
						|
.. data:: SO_*
 | 
						|
          SOMAXCONN
 | 
						|
          MSG_*
 | 
						|
          SOL_*
 | 
						|
          SCM_*
 | 
						|
          IPPROTO_*
 | 
						|
          IPPORT_*
 | 
						|
          INADDR_*
 | 
						|
          IP_*
 | 
						|
          IPV6_*
 | 
						|
          EAI_*
 | 
						|
          AI_*
 | 
						|
          NI_*
 | 
						|
          TCP_*
 | 
						|
 | 
						|
   Many constants of these forms, documented in the Unix documentation on sockets
 | 
						|
   and/or the IP protocol, are also defined in the socket module. They are
 | 
						|
   generally used in arguments to the :meth:`~socket.setsockopt` and :meth:`~socket.getsockopt`
 | 
						|
   methods of socket objects.  In most cases, only those symbols that are defined
 | 
						|
   in the Unix header files are defined; for a few symbols, default values are
 | 
						|
   provided.
 | 
						|
 | 
						|
   .. versionchanged:: 3.6
 | 
						|
      ``SO_DOMAIN``, ``SO_PROTOCOL``, ``SO_PEERSEC``, ``SO_PASSSEC``,
 | 
						|
      ``TCP_USER_TIMEOUT``, ``TCP_CONGESTION`` were added.
 | 
						|
 | 
						|
   .. versionchanged:: 3.6.5
 | 
						|
      Added support for ``TCP_FASTOPEN``, ``TCP_KEEPCNT`` on Windows platforms
 | 
						|
      when available.
 | 
						|
 | 
						|
   .. versionchanged:: 3.7
 | 
						|
      ``TCP_NOTSENT_LOWAT`` was added.
 | 
						|
 | 
						|
      Added support for ``TCP_KEEPIDLE``, ``TCP_KEEPINTVL`` on Windows platforms
 | 
						|
      when available.
 | 
						|
 | 
						|
   .. versionchanged:: 3.10
 | 
						|
      ``IP_RECVTOS`` was added.
 | 
						|
       Added ``TCP_KEEPALIVE``. On MacOS this constant can be used in the same
 | 
						|
       way that ``TCP_KEEPIDLE`` is used on Linux.
 | 
						|
 | 
						|
   .. versionchanged:: 3.11
 | 
						|
      Added ``TCP_CONNECTION_INFO``. On MacOS this constant can be used in the
 | 
						|
      same way that ``TCP_INFO`` is used on Linux and BSD.
 | 
						|
 | 
						|
   .. versionchanged:: 3.12
 | 
						|
      Added ``SO_RTABLE`` and ``SO_USER_COOKIE``. On OpenBSD
 | 
						|
      and FreeBSD respectively those constants can be used in the same way that
 | 
						|
      ``SO_MARK`` is used on Linux. Also added missing TCP socket options from
 | 
						|
      Linux: ``TCP_MD5SIG``, ``TCP_THIN_LINEAR_TIMEOUTS``, ``TCP_THIN_DUPACK``,
 | 
						|
      ``TCP_REPAIR``, ``TCP_REPAIR_QUEUE``, ``TCP_QUEUE_SEQ``,
 | 
						|
      ``TCP_REPAIR_OPTIONS``, ``TCP_TIMESTAMP``, ``TCP_CC_INFO``,
 | 
						|
      ``TCP_SAVE_SYN``, ``TCP_SAVED_SYN``, ``TCP_REPAIR_WINDOW``,
 | 
						|
      ``TCP_FASTOPEN_CONNECT``, ``TCP_ULP``, ``TCP_MD5SIG_EXT``,
 | 
						|
      ``TCP_FASTOPEN_KEY``, ``TCP_FASTOPEN_NO_COOKIE``,
 | 
						|
      ``TCP_ZEROCOPY_RECEIVE``, ``TCP_INQ``, ``TCP_TX_DELAY``.
 | 
						|
      Added ``IP_PKTINFO``, ``IP_UNBLOCK_SOURCE``, ``IP_BLOCK_SOURCE``,
 | 
						|
      ``IP_ADD_SOURCE_MEMBERSHIP``, ``IP_DROP_SOURCE_MEMBERSHIP``.
 | 
						|
 | 
						|
   .. versionchanged:: 3.13
 | 
						|
      Added ``SO_BINDTOIFINDEX``. On Linux this constant can be used in the
 | 
						|
      same way that ``SO_BINDTODEVICE`` is used, but with the index of a
 | 
						|
      network interface instead of its name.
 | 
						|
 | 
						|
   .. versionchanged:: 3.14
 | 
						|
      Added missing ``IP_RECVERR``, ``IPV6_RECVERR``, ``IP_RECVTTL``, and
 | 
						|
      ``IP_RECVORIGDSTADDR`` on Linux.
 | 
						|
 | 
						|
   .. versionchanged:: 3.14
 | 
						|
      Added support for ``TCP_QUICKACK`` on Windows platforms when available.
 | 
						|
 | 
						|
 | 
						|
.. data:: AF_CAN
 | 
						|
          PF_CAN
 | 
						|
          SOL_CAN_*
 | 
						|
          CAN_*
 | 
						|
 | 
						|
   Many constants of these forms, documented in the Linux documentation, are
 | 
						|
   also defined in the socket module.
 | 
						|
 | 
						|
   .. availability:: Linux >= 2.6.25, NetBSD >= 8.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
   .. versionchanged:: 3.11
 | 
						|
      NetBSD support was added.
 | 
						|
 | 
						|
.. data:: CAN_BCM
 | 
						|
          CAN_BCM_*
 | 
						|
 | 
						|
   CAN_BCM, in the CAN protocol family, is the broadcast manager (BCM) protocol.
 | 
						|
   Broadcast manager constants, documented in the Linux documentation, are also
 | 
						|
   defined in the socket module.
 | 
						|
 | 
						|
   .. availability:: Linux >= 2.6.25.
 | 
						|
 | 
						|
   .. note::
 | 
						|
      The :data:`CAN_BCM_CAN_FD_FRAME` flag is only available on Linux >= 4.8.
 | 
						|
 | 
						|
   .. versionadded:: 3.4
 | 
						|
 | 
						|
.. data:: CAN_RAW_FD_FRAMES
 | 
						|
 | 
						|
   Enables CAN FD support in a CAN_RAW socket. This is disabled by default.
 | 
						|
   This allows your application to send both CAN and CAN FD frames; however,
 | 
						|
   you must accept both CAN and CAN FD frames when reading from the socket.
 | 
						|
 | 
						|
   This constant is documented in the Linux documentation.
 | 
						|
 | 
						|
   .. availability:: Linux >= 3.6.
 | 
						|
 | 
						|
   .. versionadded:: 3.5
 | 
						|
 | 
						|
.. data:: CAN_RAW_JOIN_FILTERS
 | 
						|
 | 
						|
   Joins the applied CAN filters such that only CAN frames that match all
 | 
						|
   given CAN filters are passed to user space.
 | 
						|
 | 
						|
   This constant is documented in the Linux documentation.
 | 
						|
 | 
						|
   .. availability:: Linux >= 4.1.
 | 
						|
 | 
						|
   .. versionadded:: 3.9
 | 
						|
 | 
						|
.. data:: CAN_ISOTP
 | 
						|
 | 
						|
   CAN_ISOTP, in the CAN protocol family, is the ISO-TP (ISO 15765-2) protocol.
 | 
						|
   ISO-TP constants, documented in the Linux documentation.
 | 
						|
 | 
						|
   .. availability:: Linux >= 2.6.25.
 | 
						|
 | 
						|
   .. versionadded:: 3.7
 | 
						|
 | 
						|
.. data:: CAN_J1939
 | 
						|
 | 
						|
   CAN_J1939, in the CAN protocol family, is the SAE J1939 protocol.
 | 
						|
   J1939 constants, documented in the Linux documentation.
 | 
						|
 | 
						|
   .. availability:: Linux >= 5.4.
 | 
						|
 | 
						|
   .. versionadded:: 3.9
 | 
						|
 | 
						|
 | 
						|
.. data:: AF_DIVERT
 | 
						|
          PF_DIVERT
 | 
						|
 | 
						|
   These two constants, documented in the FreeBSD divert(4) manual page, are
 | 
						|
   also defined in the socket module.
 | 
						|
 | 
						|
   .. availability:: FreeBSD >= 14.0.
 | 
						|
 | 
						|
   .. versionadded:: 3.12
 | 
						|
 | 
						|
 | 
						|
.. data:: AF_PACKET
 | 
						|
          PF_PACKET
 | 
						|
          PACKET_*
 | 
						|
 | 
						|
   Many constants of these forms, documented in the Linux documentation, are
 | 
						|
   also defined in the socket module.
 | 
						|
 | 
						|
   .. availability:: Linux >= 2.2.
 | 
						|
 | 
						|
 | 
						|
.. data:: ETH_P_ALL
 | 
						|
 | 
						|
   :data:`!ETH_P_ALL` can be used in the :class:`~socket.socket`
 | 
						|
   constructor as *proto* for the :const:`AF_PACKET` family in order to
 | 
						|
   capture every packet, regardless of protocol.
 | 
						|
 | 
						|
   For more information, see the :manpage:`packet(7)` manpage.
 | 
						|
 | 
						|
   .. availability:: Linux.
 | 
						|
 | 
						|
   .. versionadded:: 3.12
 | 
						|
 | 
						|
 | 
						|
.. data:: AF_RDS
 | 
						|
          PF_RDS
 | 
						|
          SOL_RDS
 | 
						|
          RDS_*
 | 
						|
 | 
						|
   Many constants of these forms, documented in the Linux documentation, are
 | 
						|
   also defined in the socket module.
 | 
						|
 | 
						|
   .. availability:: Linux >= 2.6.30.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
 | 
						|
.. data:: SIO_RCVALL
 | 
						|
          SIO_KEEPALIVE_VALS
 | 
						|
          SIO_LOOPBACK_FAST_PATH
 | 
						|
          RCVALL_*
 | 
						|
 | 
						|
   Constants for Windows' WSAIoctl(). The constants are used as arguments to the
 | 
						|
   :meth:`~socket.socket.ioctl` method of socket objects.
 | 
						|
 | 
						|
   .. versionchanged:: 3.6
 | 
						|
      ``SIO_LOOPBACK_FAST_PATH`` was added.
 | 
						|
 | 
						|
 | 
						|
.. data:: TIPC_*
 | 
						|
 | 
						|
   TIPC related constants, matching the ones exported by the C socket API. See
 | 
						|
   the TIPC documentation for more information.
 | 
						|
 | 
						|
.. data:: AF_ALG
 | 
						|
          SOL_ALG
 | 
						|
          ALG_*
 | 
						|
 | 
						|
   Constants for Linux Kernel cryptography.
 | 
						|
 | 
						|
   .. availability:: Linux >= 2.6.38.
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
 | 
						|
.. data:: AF_VSOCK
 | 
						|
          IOCTL_VM_SOCKETS_GET_LOCAL_CID
 | 
						|
          VMADDR*
 | 
						|
          SO_VM*
 | 
						|
 | 
						|
   Constants for Linux host/guest communication.
 | 
						|
 | 
						|
   .. availability:: Linux >= 4.8.
 | 
						|
 | 
						|
   .. versionadded:: 3.7
 | 
						|
 | 
						|
.. data:: AF_LINK
 | 
						|
 | 
						|
  .. availability:: BSD, macOS.
 | 
						|
 | 
						|
  .. versionadded:: 3.4
 | 
						|
 | 
						|
.. data:: has_ipv6
 | 
						|
 | 
						|
   This constant contains a boolean value which indicates if IPv6 is supported on
 | 
						|
   this platform.
 | 
						|
 | 
						|
.. data:: BDADDR_ANY
 | 
						|
          BDADDR_LOCAL
 | 
						|
 | 
						|
   These are string constants containing Bluetooth addresses with special
 | 
						|
   meanings. For example, :const:`BDADDR_ANY` can be used to indicate
 | 
						|
   any address when specifying the binding socket with
 | 
						|
   :const:`BTPROTO_RFCOMM`.
 | 
						|
 | 
						|
.. data:: HCI_FILTER
 | 
						|
          HCI_TIME_STAMP
 | 
						|
          HCI_DATA_DIR
 | 
						|
 | 
						|
   For use with :const:`BTPROTO_HCI`. :const:`HCI_FILTER` is not
 | 
						|
   available for NetBSD or DragonFlyBSD. :const:`HCI_TIME_STAMP` and
 | 
						|
   :const:`HCI_DATA_DIR` are not available for FreeBSD, NetBSD, or
 | 
						|
   DragonFlyBSD.
 | 
						|
 | 
						|
.. data:: AF_QIPCRTR
 | 
						|
 | 
						|
   Constant for Qualcomm's IPC router protocol, used to communicate with
 | 
						|
   service providing remote processors.
 | 
						|
 | 
						|
   .. availability:: Linux >= 4.7.
 | 
						|
 | 
						|
.. data:: SCM_CREDS2
 | 
						|
          LOCAL_CREDS
 | 
						|
          LOCAL_CREDS_PERSISTENT
 | 
						|
 | 
						|
   LOCAL_CREDS and LOCAL_CREDS_PERSISTENT can be used
 | 
						|
   with SOCK_DGRAM, SOCK_STREAM sockets, equivalent to
 | 
						|
   Linux/DragonFlyBSD SO_PASSCRED, while LOCAL_CREDS
 | 
						|
   sends the credentials at first read, LOCAL_CREDS_PERSISTENT
 | 
						|
   sends for each read, SCM_CREDS2 must be then used for
 | 
						|
   the latter for the message type.
 | 
						|
 | 
						|
   .. versionadded:: 3.11
 | 
						|
 | 
						|
   .. availability:: FreeBSD.
 | 
						|
 | 
						|
.. data:: SO_INCOMING_CPU
 | 
						|
 | 
						|
   Constant to optimize CPU locality, to be used in conjunction with
 | 
						|
   :data:`SO_REUSEPORT`.
 | 
						|
 | 
						|
  .. versionadded:: 3.11
 | 
						|
 | 
						|
  .. availability:: Linux >= 3.9
 | 
						|
 | 
						|
.. data:: AF_HYPERV
 | 
						|
          HV_PROTOCOL_RAW
 | 
						|
          HVSOCKET_CONNECT_TIMEOUT
 | 
						|
          HVSOCKET_CONNECT_TIMEOUT_MAX
 | 
						|
          HVSOCKET_CONNECTED_SUSPEND
 | 
						|
          HVSOCKET_ADDRESS_FLAG_PASSTHRU
 | 
						|
          HV_GUID_ZERO
 | 
						|
          HV_GUID_WILDCARD
 | 
						|
          HV_GUID_BROADCAST
 | 
						|
          HV_GUID_CHILDREN
 | 
						|
          HV_GUID_LOOPBACK
 | 
						|
          HV_GUID_PARENT
 | 
						|
 | 
						|
   Constants for Windows Hyper-V sockets for host/guest communications.
 | 
						|
 | 
						|
   .. availability:: Windows.
 | 
						|
 | 
						|
   .. versionadded:: 3.12
 | 
						|
 | 
						|
.. _socket-ethernet-types:
 | 
						|
 | 
						|
.. data:: ETHERTYPE_ARP
 | 
						|
          ETHERTYPE_IP
 | 
						|
          ETHERTYPE_IPV6
 | 
						|
          ETHERTYPE_VLAN
 | 
						|
 | 
						|
   `IEEE 802.3 protocol number
 | 
						|
   <https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.txt>`_.
 | 
						|
   constants.
 | 
						|
 | 
						|
   .. availability:: Linux, FreeBSD, macOS.
 | 
						|
 | 
						|
   .. versionadded:: 3.12
 | 
						|
 | 
						|
.. data:: SHUT_RD
 | 
						|
          SHUT_WR
 | 
						|
          SHUT_RDWR
 | 
						|
 | 
						|
   These constants are used by the :meth:`~socket.socket.shutdown` method of socket objects.
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
Functions
 | 
						|
^^^^^^^^^
 | 
						|
 | 
						|
Creating sockets
 | 
						|
''''''''''''''''
 | 
						|
 | 
						|
The following functions all create :ref:`socket objects <socket-objects>`.
 | 
						|
 | 
						|
 | 
						|
.. class:: socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
 | 
						|
 | 
						|
   Create a new socket using the given address family, socket type and protocol
 | 
						|
   number.  The address family should be :const:`AF_INET` (the default),
 | 
						|
   :const:`AF_INET6`, :const:`AF_UNIX`, :const:`AF_CAN`, :const:`AF_PACKET`,
 | 
						|
   or :const:`AF_RDS`. The socket type should be :const:`SOCK_STREAM` (the
 | 
						|
   default), :const:`SOCK_DGRAM`, :const:`SOCK_RAW` or perhaps one of the other
 | 
						|
   ``SOCK_`` constants. The protocol number is usually zero and may be omitted
 | 
						|
   or in the case where the address family is :const:`AF_CAN` the protocol
 | 
						|
   should be one of :const:`CAN_RAW`, :const:`CAN_BCM`, :const:`CAN_ISOTP` or
 | 
						|
   :const:`CAN_J1939`.
 | 
						|
 | 
						|
   If *fileno* is specified, the values for *family*, *type*, and *proto* are
 | 
						|
   auto-detected from the specified file descriptor.  Auto-detection can be
 | 
						|
   overruled by calling the function with explicit *family*, *type*, or *proto*
 | 
						|
   arguments.  This only affects how Python represents e.g. the return value
 | 
						|
   of :meth:`socket.getpeername` but not the actual OS resource.  Unlike
 | 
						|
   :func:`socket.fromfd`, *fileno* will return the same socket and not a
 | 
						|
   duplicate. This may help close a detached socket using
 | 
						|
   :meth:`socket.close`.
 | 
						|
 | 
						|
   The newly created socket is :ref:`non-inheritable <fd_inheritance>`.
 | 
						|
 | 
						|
   .. audit-event:: socket.__new__ self,family,type,protocol socket.socket
 | 
						|
 | 
						|
   .. versionchanged:: 3.3
 | 
						|
      The AF_CAN family was added.
 | 
						|
      The AF_RDS family was added.
 | 
						|
 | 
						|
   .. versionchanged:: 3.4
 | 
						|
       The CAN_BCM protocol was added.
 | 
						|
 | 
						|
   .. versionchanged:: 3.4
 | 
						|
      The returned socket is now non-inheritable.
 | 
						|
 | 
						|
   .. versionchanged:: 3.7
 | 
						|
       The CAN_ISOTP protocol was added.
 | 
						|
 | 
						|
   .. versionchanged:: 3.7
 | 
						|
      When :const:`SOCK_NONBLOCK` or :const:`SOCK_CLOEXEC`
 | 
						|
      bit flags are applied to *type* they are cleared, and
 | 
						|
      :attr:`socket.type` will not reflect them.  They are still passed
 | 
						|
      to the underlying system ``socket()`` call.  Therefore,
 | 
						|
 | 
						|
      ::
 | 
						|
 | 
						|
          sock = socket.socket(
 | 
						|
              socket.AF_INET,
 | 
						|
              socket.SOCK_STREAM | socket.SOCK_NONBLOCK)
 | 
						|
 | 
						|
      will still create a non-blocking socket on OSes that support
 | 
						|
      ``SOCK_NONBLOCK``, but ``sock.type`` will be set to
 | 
						|
      ``socket.SOCK_STREAM``.
 | 
						|
 | 
						|
   .. versionchanged:: 3.9
 | 
						|
       The CAN_J1939 protocol was added.
 | 
						|
 | 
						|
   .. versionchanged:: 3.10
 | 
						|
       The IPPROTO_MPTCP protocol was added.
 | 
						|
 | 
						|
.. function:: socketpair([family[, type[, proto]]])
 | 
						|
 | 
						|
   Build a pair of connected socket objects using the given address family, socket
 | 
						|
   type, and protocol number.  Address family, socket type, and protocol number are
 | 
						|
   as for the :func:`~socket.socket` function above. The default family is :const:`AF_UNIX`
 | 
						|
   if defined on the platform; otherwise, the default is :const:`AF_INET`.
 | 
						|
 | 
						|
   The newly created sockets are :ref:`non-inheritable <fd_inheritance>`.
 | 
						|
 | 
						|
   .. versionchanged:: 3.2
 | 
						|
      The returned socket objects now support the whole socket API, rather
 | 
						|
      than a subset.
 | 
						|
 | 
						|
   .. versionchanged:: 3.4
 | 
						|
      The returned sockets are now non-inheritable.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      Windows support added.
 | 
						|
 | 
						|
 | 
						|
.. function:: create_connection(address, timeout=GLOBAL_DEFAULT, source_address=None, *, all_errors=False)
 | 
						|
 | 
						|
   Connect to a TCP service listening on the internet *address* (a 2-tuple
 | 
						|
   ``(host, port)``), and return the socket object.  This is a higher-level
 | 
						|
   function than :meth:`socket.connect`: if *host* is a non-numeric hostname,
 | 
						|
   it will try to resolve it for both :data:`AF_INET` and :data:`AF_INET6`,
 | 
						|
   and then try to connect to all possible addresses in turn until a
 | 
						|
   connection succeeds.  This makes it easy to write clients that are
 | 
						|
   compatible to both IPv4 and IPv6.
 | 
						|
 | 
						|
   Passing the optional *timeout* parameter will set the timeout on the
 | 
						|
   socket instance before attempting to connect.  If no *timeout* is
 | 
						|
   supplied, the global default timeout setting returned by
 | 
						|
   :func:`getdefaulttimeout` is used.
 | 
						|
 | 
						|
   If supplied, *source_address* must be a 2-tuple ``(host, port)`` for the
 | 
						|
   socket to bind to as its source address before connecting.  If host or port
 | 
						|
   are '' or 0 respectively the OS default behavior will be used.
 | 
						|
 | 
						|
   When a connection cannot be created, an exception is raised. By default,
 | 
						|
   it is the exception from the last address in the list. If *all_errors*
 | 
						|
   is ``True``, it is an :exc:`ExceptionGroup` containing the errors of all
 | 
						|
   attempts.
 | 
						|
 | 
						|
   .. versionchanged:: 3.2
 | 
						|
      *source_address* was added.
 | 
						|
 | 
						|
   .. versionchanged:: 3.11
 | 
						|
      *all_errors* was added.
 | 
						|
 | 
						|
 | 
						|
.. function:: create_server(address, *, family=AF_INET, backlog=None, reuse_port=False, dualstack_ipv6=False)
 | 
						|
 | 
						|
   Convenience function which creates a TCP socket bound to *address* (a 2-tuple
 | 
						|
   ``(host, port)``) and returns the socket object.
 | 
						|
 | 
						|
   *family* should be either :data:`AF_INET` or :data:`AF_INET6`.
 | 
						|
   *backlog* is the queue size passed to :meth:`socket.listen`; if not specified
 | 
						|
   , a default reasonable value is chosen.
 | 
						|
   *reuse_port* dictates whether to set the :data:`SO_REUSEPORT` socket option.
 | 
						|
 | 
						|
   If *dualstack_ipv6* is true and the platform supports it the socket will
 | 
						|
   be able to accept both IPv4 and IPv6 connections, else it will raise
 | 
						|
   :exc:`ValueError`. Most POSIX platforms and Windows are supposed to support
 | 
						|
   this functionality.
 | 
						|
   When this functionality is enabled the address returned by
 | 
						|
   :meth:`socket.getpeername` when an IPv4 connection occurs will be an IPv6
 | 
						|
   address represented as an IPv4-mapped IPv6 address.
 | 
						|
   If *dualstack_ipv6* is false it will explicitly disable this functionality
 | 
						|
   on platforms that enable it by default (e.g. Linux).
 | 
						|
   This parameter can be used in conjunction with :func:`has_dualstack_ipv6`:
 | 
						|
 | 
						|
   ::
 | 
						|
 | 
						|
     import socket
 | 
						|
 | 
						|
     addr = ("", 8080)  # all interfaces, port 8080
 | 
						|
     if socket.has_dualstack_ipv6():
 | 
						|
         s = socket.create_server(addr, family=socket.AF_INET6, dualstack_ipv6=True)
 | 
						|
     else:
 | 
						|
         s = socket.create_server(addr)
 | 
						|
 | 
						|
   .. note::
 | 
						|
    On POSIX platforms the :data:`SO_REUSEADDR` socket option is set in order to
 | 
						|
    immediately reuse previous sockets which were bound on the same *address*
 | 
						|
    and remained in TIME_WAIT state.
 | 
						|
 | 
						|
   .. versionadded:: 3.8
 | 
						|
 | 
						|
.. function:: has_dualstack_ipv6()
 | 
						|
 | 
						|
   Return ``True`` if the platform supports creating a TCP socket which can
 | 
						|
   handle both IPv4 and IPv6 connections.
 | 
						|
 | 
						|
   .. versionadded:: 3.8
 | 
						|
 | 
						|
.. function:: fromfd(fd, family, type, proto=0)
 | 
						|
 | 
						|
   Duplicate the file descriptor *fd* (an integer as returned by a file object's
 | 
						|
   :meth:`~io.IOBase.fileno` method) and build a socket object from the result.  Address
 | 
						|
   family, socket type and protocol number are as for the :func:`~socket.socket` function
 | 
						|
   above. The file descriptor should refer to a socket, but this is not checked ---
 | 
						|
   subsequent operations on the object may fail if the file descriptor is invalid.
 | 
						|
   This function is rarely needed, but can be used to get or set socket options on
 | 
						|
   a socket passed to a program as standard input or output (such as a server
 | 
						|
   started by the Unix inet daemon).  The socket is assumed to be in blocking mode.
 | 
						|
 | 
						|
   The newly created socket is :ref:`non-inheritable <fd_inheritance>`.
 | 
						|
 | 
						|
   .. versionchanged:: 3.4
 | 
						|
      The returned socket is now non-inheritable.
 | 
						|
 | 
						|
 | 
						|
.. function:: fromshare(data)
 | 
						|
 | 
						|
   Instantiate a socket from data obtained from the :meth:`socket.share`
 | 
						|
   method.  The socket is assumed to be in blocking mode.
 | 
						|
 | 
						|
   .. availability:: Windows.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
 | 
						|
.. data:: SocketType
 | 
						|
 | 
						|
   This is a Python type object that represents the socket object type. It is the
 | 
						|
   same as ``type(socket(...))``.
 | 
						|
 | 
						|
 | 
						|
Other functions
 | 
						|
'''''''''''''''
 | 
						|
 | 
						|
The :mod:`socket` module also offers various network-related services:
 | 
						|
 | 
						|
 | 
						|
.. function:: close(fd)
 | 
						|
 | 
						|
   Close a socket file descriptor. This is like :func:`os.close`, but for
 | 
						|
   sockets. On some platforms (most noticeable Windows) :func:`os.close`
 | 
						|
   does not work for socket file descriptors.
 | 
						|
 | 
						|
   .. versionadded:: 3.7
 | 
						|
 | 
						|
.. function:: getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)
 | 
						|
 | 
						|
   Translate the *host*/*port* argument into a sequence of 5-tuples that contain
 | 
						|
   all the necessary arguments for creating a socket connected to that service.
 | 
						|
   *host* is a domain name, a string representation of an IPv4/v6 address
 | 
						|
   or ``None``. *port* is a string service name such as ``'http'``, a numeric
 | 
						|
   port number or ``None``.  By passing ``None`` as the value of *host*
 | 
						|
   and *port*, you can pass ``NULL`` to the underlying C API.
 | 
						|
 | 
						|
   The *family*, *type* and *proto* arguments can be optionally specified
 | 
						|
   in order to narrow the list of addresses returned.  Passing zero as a
 | 
						|
   value for each of these arguments selects the full range of results.
 | 
						|
   The *flags* argument can be one or several of the ``AI_*`` constants,
 | 
						|
   and will influence how results are computed and returned.
 | 
						|
   For example, :const:`AI_NUMERICHOST` will disable domain name resolution
 | 
						|
   and will raise an error if *host* is a domain name.
 | 
						|
 | 
						|
   The function returns a list of 5-tuples with the following structure:
 | 
						|
 | 
						|
   ``(family, type, proto, canonname, sockaddr)``
 | 
						|
 | 
						|
   In these tuples, *family*, *type*, *proto* are all integers and are
 | 
						|
   meant to be passed to the :func:`~socket.socket` function.  *canonname* will be
 | 
						|
   a string representing the canonical name of the *host* if
 | 
						|
   :const:`AI_CANONNAME` is part of the *flags* argument; else *canonname*
 | 
						|
   will be empty.  *sockaddr* is a tuple describing a socket address, whose
 | 
						|
   format depends on the returned *family* (a ``(address, port)`` 2-tuple for
 | 
						|
   :const:`AF_INET`, a ``(address, port, flowinfo, scope_id)`` 4-tuple for
 | 
						|
   :const:`AF_INET6`), and is meant to be passed to the :meth:`socket.connect`
 | 
						|
   method.
 | 
						|
 | 
						|
   .. audit-event:: socket.getaddrinfo host,port,family,type,protocol socket.getaddrinfo
 | 
						|
 | 
						|
   The following example fetches address information for a hypothetical TCP
 | 
						|
   connection to ``example.org`` on port 80 (results may differ on your
 | 
						|
   system if IPv6 isn't enabled)::
 | 
						|
 | 
						|
      >>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)
 | 
						|
      [(socket.AF_INET6, socket.SOCK_STREAM,
 | 
						|
       6, '', ('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
 | 
						|
       (socket.AF_INET, socket.SOCK_STREAM,
 | 
						|
       6, '', ('93.184.216.34', 80))]
 | 
						|
 | 
						|
   .. versionchanged:: 3.2
 | 
						|
      parameters can now be passed using keyword arguments.
 | 
						|
 | 
						|
   .. versionchanged:: 3.7
 | 
						|
      for IPv6 multicast addresses, string representing an address will not
 | 
						|
      contain ``%scope_id`` part.
 | 
						|
 | 
						|
.. function:: getfqdn([name])
 | 
						|
 | 
						|
   Return a fully qualified domain name for *name*. If *name* is omitted or empty,
 | 
						|
   it is interpreted as the local host.  To find the fully qualified name, the
 | 
						|
   hostname returned by :func:`gethostbyaddr` is checked, followed by aliases for the
 | 
						|
   host, if available.  The first name which includes a period is selected.  In
 | 
						|
   case no fully qualified domain name is available and *name* was provided,
 | 
						|
   it is returned unchanged.  If *name* was empty or equal to ``'0.0.0.0'``,
 | 
						|
   the hostname from :func:`gethostname` is returned.
 | 
						|
 | 
						|
 | 
						|
.. function:: gethostbyname(hostname)
 | 
						|
 | 
						|
   Translate a host name to IPv4 address format.  The IPv4 address is returned as a
 | 
						|
   string, such as  ``'100.50.200.5'``.  If the host name is an IPv4 address itself
 | 
						|
   it is returned unchanged.  See :func:`gethostbyname_ex` for a more complete
 | 
						|
   interface. :func:`gethostbyname` does not support IPv6 name resolution, and
 | 
						|
   :func:`getaddrinfo` should be used instead for IPv4/v6 dual stack support.
 | 
						|
 | 
						|
   .. audit-event:: socket.gethostbyname hostname socket.gethostbyname
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. function:: gethostbyname_ex(hostname)
 | 
						|
 | 
						|
   Translate a host name to IPv4 address format, extended interface. Return a
 | 
						|
   3-tuple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the host's
 | 
						|
   primary host name, *aliaslist* is a (possibly
 | 
						|
   empty) list of alternative host names for the same address, and *ipaddrlist* is
 | 
						|
   a list of IPv4 addresses for the same interface on the same host (often but not
 | 
						|
   always a single address). :func:`gethostbyname_ex` does not support IPv6 name
 | 
						|
   resolution, and :func:`getaddrinfo` should be used instead for IPv4/v6 dual
 | 
						|
   stack support.
 | 
						|
 | 
						|
   .. audit-event:: socket.gethostbyname hostname socket.gethostbyname_ex
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. function:: gethostname()
 | 
						|
 | 
						|
   Return a string containing the hostname of the machine where  the Python
 | 
						|
   interpreter is currently executing.
 | 
						|
 | 
						|
   .. audit-event:: socket.gethostname "" socket.gethostname
 | 
						|
 | 
						|
   Note: :func:`gethostname` doesn't always return the fully qualified domain
 | 
						|
   name; use :func:`getfqdn` for that.
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. function:: gethostbyaddr(ip_address)
 | 
						|
 | 
						|
   Return a 3-tuple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the
 | 
						|
   primary host name responding to the given *ip_address*, *aliaslist* is a
 | 
						|
   (possibly empty) list of alternative host names for the same address, and
 | 
						|
   *ipaddrlist* is a list of IPv4/v6 addresses for the same interface on the same
 | 
						|
   host (most likely containing only a single address). To find the fully qualified
 | 
						|
   domain name, use the function :func:`getfqdn`. :func:`gethostbyaddr` supports
 | 
						|
   both IPv4 and IPv6.
 | 
						|
 | 
						|
   .. audit-event:: socket.gethostbyaddr ip_address socket.gethostbyaddr
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. function:: getnameinfo(sockaddr, flags)
 | 
						|
 | 
						|
   Translate a socket address *sockaddr* into a 2-tuple ``(host, port)``. Depending
 | 
						|
   on the settings of *flags*, the result can contain a fully qualified domain name
 | 
						|
   or numeric address representation in *host*.  Similarly, *port* can contain a
 | 
						|
   string port name or a numeric port number.
 | 
						|
 | 
						|
   For IPv6 addresses, ``%scope_id`` is appended to the host part if *sockaddr*
 | 
						|
   contains meaningful *scope_id*. Usually this happens for multicast addresses.
 | 
						|
 | 
						|
   For more information about *flags* you can consult :manpage:`getnameinfo(3)`.
 | 
						|
 | 
						|
   .. audit-event:: socket.getnameinfo sockaddr socket.getnameinfo
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. function:: getprotobyname(protocolname)
 | 
						|
 | 
						|
   Translate an internet protocol name (for example, ``'icmp'``) to a constant
 | 
						|
   suitable for passing as the (optional) third argument to the :func:`~socket.socket`
 | 
						|
   function.  This is usually only needed for sockets opened in "raw" mode
 | 
						|
   (:const:`SOCK_RAW`); for the normal socket modes, the correct protocol is chosen
 | 
						|
   automatically if the protocol is omitted or zero.
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. function:: getservbyname(servicename[, protocolname])
 | 
						|
 | 
						|
   Translate an internet service name and protocol name to a port number for that
 | 
						|
   service.  The optional protocol name, if given, should be ``'tcp'`` or
 | 
						|
   ``'udp'``, otherwise any protocol will match.
 | 
						|
 | 
						|
   .. audit-event:: socket.getservbyname servicename,protocolname socket.getservbyname
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. function:: getservbyport(port[, protocolname])
 | 
						|
 | 
						|
   Translate an internet port number and protocol name to a service name for that
 | 
						|
   service.  The optional protocol name, if given, should be ``'tcp'`` or
 | 
						|
   ``'udp'``, otherwise any protocol will match.
 | 
						|
 | 
						|
   .. audit-event:: socket.getservbyport port,protocolname socket.getservbyport
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. function:: ntohl(x)
 | 
						|
 | 
						|
   Convert 32-bit positive integers from network to host byte order.  On machines
 | 
						|
   where the host byte order is the same as network byte order, this is a no-op;
 | 
						|
   otherwise, it performs a 4-byte swap operation.
 | 
						|
 | 
						|
 | 
						|
.. function:: ntohs(x)
 | 
						|
 | 
						|
   Convert 16-bit positive integers from network to host byte order.  On machines
 | 
						|
   where the host byte order is the same as network byte order, this is a no-op;
 | 
						|
   otherwise, it performs a 2-byte swap operation.
 | 
						|
 | 
						|
   .. versionchanged:: 3.10
 | 
						|
      Raises :exc:`OverflowError` if *x* does not fit in a 16-bit unsigned
 | 
						|
      integer.
 | 
						|
 | 
						|
 | 
						|
.. function:: htonl(x)
 | 
						|
 | 
						|
   Convert 32-bit positive integers from host to network byte order.  On machines
 | 
						|
   where the host byte order is the same as network byte order, this is a no-op;
 | 
						|
   otherwise, it performs a 4-byte swap operation.
 | 
						|
 | 
						|
 | 
						|
.. function:: htons(x)
 | 
						|
 | 
						|
   Convert 16-bit positive integers from host to network byte order.  On machines
 | 
						|
   where the host byte order is the same as network byte order, this is a no-op;
 | 
						|
   otherwise, it performs a 2-byte swap operation.
 | 
						|
 | 
						|
   .. versionchanged:: 3.10
 | 
						|
      Raises :exc:`OverflowError` if *x* does not fit in a 16-bit unsigned
 | 
						|
      integer.
 | 
						|
 | 
						|
 | 
						|
.. function:: inet_aton(ip_string)
 | 
						|
 | 
						|
   Convert an IPv4 address from dotted-quad string format (for example,
 | 
						|
   '123.45.67.89') to 32-bit packed binary format, as a bytes object four characters in
 | 
						|
   length.  This is useful when conversing with a program that uses the standard C
 | 
						|
   library and needs objects of type :c:struct:`in_addr`, which is the C type
 | 
						|
   for the 32-bit packed binary this function returns.
 | 
						|
 | 
						|
   :func:`inet_aton` also accepts strings with less than three dots; see the
 | 
						|
   Unix manual page :manpage:`inet(3)` for details.
 | 
						|
 | 
						|
   If the IPv4 address string passed to this function is invalid,
 | 
						|
   :exc:`OSError` will be raised. Note that exactly what is valid depends on
 | 
						|
   the underlying C implementation of :c:func:`inet_aton`.
 | 
						|
 | 
						|
   :func:`inet_aton` does not support IPv6, and :func:`inet_pton` should be used
 | 
						|
   instead for IPv4/v6 dual stack support.
 | 
						|
 | 
						|
 | 
						|
.. function:: inet_ntoa(packed_ip)
 | 
						|
 | 
						|
   Convert a 32-bit packed IPv4 address (a :term:`bytes-like object` four
 | 
						|
   bytes in length) to its standard dotted-quad string representation (for example,
 | 
						|
   '123.45.67.89').  This is useful when conversing with a program that uses the
 | 
						|
   standard C library and needs objects of type :c:struct:`in_addr`, which
 | 
						|
   is the C type for the 32-bit packed binary data this function takes as an
 | 
						|
   argument.
 | 
						|
 | 
						|
   If the byte sequence passed to this function is not exactly 4 bytes in
 | 
						|
   length, :exc:`OSError` will be raised. :func:`inet_ntoa` does not
 | 
						|
   support IPv6, and :func:`inet_ntop` should be used instead for IPv4/v6 dual
 | 
						|
   stack support.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      Writable :term:`bytes-like object` is now accepted.
 | 
						|
 | 
						|
 | 
						|
.. function:: inet_pton(address_family, ip_string)
 | 
						|
 | 
						|
   Convert an IP address from its family-specific string format to a packed,
 | 
						|
   binary format. :func:`inet_pton` is useful when a library or network protocol
 | 
						|
   calls for an object of type :c:struct:`in_addr` (similar to
 | 
						|
   :func:`inet_aton`) or :c:struct:`in6_addr`.
 | 
						|
 | 
						|
   Supported values for *address_family* are currently :const:`AF_INET` and
 | 
						|
   :const:`AF_INET6`. If the IP address string *ip_string* is invalid,
 | 
						|
   :exc:`OSError` will be raised. Note that exactly what is valid depends on
 | 
						|
   both the value of *address_family* and the underlying implementation of
 | 
						|
   :c:func:`inet_pton`.
 | 
						|
 | 
						|
   .. availability:: Unix, Windows.
 | 
						|
 | 
						|
   .. versionchanged:: 3.4
 | 
						|
      Windows support added
 | 
						|
 | 
						|
 | 
						|
.. function:: inet_ntop(address_family, packed_ip)
 | 
						|
 | 
						|
   Convert a packed IP address (a :term:`bytes-like object` of some number of
 | 
						|
   bytes) to its standard, family-specific string representation (for
 | 
						|
   example, ``'7.10.0.5'`` or ``'5aef:2b::8'``).
 | 
						|
   :func:`inet_ntop` is useful when a library or network protocol returns an
 | 
						|
   object of type :c:struct:`in_addr` (similar to :func:`inet_ntoa`) or
 | 
						|
   :c:struct:`in6_addr`.
 | 
						|
 | 
						|
   Supported values for *address_family* are currently :const:`AF_INET` and
 | 
						|
   :const:`AF_INET6`. If the bytes object *packed_ip* is not the correct
 | 
						|
   length for the specified address family, :exc:`ValueError` will be raised.
 | 
						|
   :exc:`OSError` is raised for errors from the call to :func:`inet_ntop`.
 | 
						|
 | 
						|
   .. availability:: Unix, Windows.
 | 
						|
 | 
						|
   .. versionchanged:: 3.4
 | 
						|
      Windows support added
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      Writable :term:`bytes-like object` is now accepted.
 | 
						|
 | 
						|
 | 
						|
..
 | 
						|
   XXX: Are sendmsg(), recvmsg() and CMSG_*() available on any
 | 
						|
   non-Unix platforms?  The old (obsolete?) 4.2BSD form of the
 | 
						|
   interface, in which struct msghdr has no msg_control or
 | 
						|
   msg_controllen members, is not currently supported.
 | 
						|
 | 
						|
.. function:: CMSG_LEN(length)
 | 
						|
 | 
						|
   Return the total length, without trailing padding, of an ancillary
 | 
						|
   data item with associated data of the given *length*.  This value
 | 
						|
   can often be used as the buffer size for :meth:`~socket.recvmsg` to
 | 
						|
   receive a single item of ancillary data, but :rfc:`3542` requires
 | 
						|
   portable applications to use :func:`CMSG_SPACE` and thus include
 | 
						|
   space for padding, even when the item will be the last in the
 | 
						|
   buffer.  Raises :exc:`OverflowError` if *length* is outside the
 | 
						|
   permissible range of values.
 | 
						|
 | 
						|
   .. availability:: Unix, not WASI.
 | 
						|
 | 
						|
      Most Unix platforms.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
 | 
						|
.. function:: CMSG_SPACE(length)
 | 
						|
 | 
						|
   Return the buffer size needed for :meth:`~socket.recvmsg` to
 | 
						|
   receive an ancillary data item with associated data of the given
 | 
						|
   *length*, along with any trailing padding.  The buffer space needed
 | 
						|
   to receive multiple items is the sum of the :func:`CMSG_SPACE`
 | 
						|
   values for their associated data lengths.  Raises
 | 
						|
   :exc:`OverflowError` if *length* is outside the permissible range
 | 
						|
   of values.
 | 
						|
 | 
						|
   Note that some systems might support ancillary data without
 | 
						|
   providing this function.  Also note that setting the buffer size
 | 
						|
   using the results of this function may not precisely limit the
 | 
						|
   amount of ancillary data that can be received, since additional
 | 
						|
   data may be able to fit into the padding area.
 | 
						|
 | 
						|
   .. availability:: Unix, not WASI.
 | 
						|
 | 
						|
      most Unix platforms.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
 | 
						|
.. function:: getdefaulttimeout()
 | 
						|
 | 
						|
   Return the default timeout in seconds (float) for new socket objects. A value
 | 
						|
   of ``None`` indicates that new socket objects have no timeout. When the socket
 | 
						|
   module is first imported, the default is ``None``.
 | 
						|
 | 
						|
 | 
						|
.. function:: setdefaulttimeout(timeout)
 | 
						|
 | 
						|
   Set the default timeout in seconds (float) for new socket objects.  When
 | 
						|
   the socket module is first imported, the default is ``None``.  See
 | 
						|
   :meth:`~socket.settimeout` for possible values and their respective
 | 
						|
   meanings.
 | 
						|
 | 
						|
 | 
						|
.. function:: sethostname(name)
 | 
						|
 | 
						|
   Set the machine's hostname to *name*.  This will raise an
 | 
						|
   :exc:`OSError` if you don't have enough rights.
 | 
						|
 | 
						|
   .. audit-event:: socket.sethostname name socket.sethostname
 | 
						|
 | 
						|
   .. availability:: Unix, not Android.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
 | 
						|
.. function:: if_nameindex()
 | 
						|
 | 
						|
   Return a list of network interface information
 | 
						|
   (index int, name string) tuples.
 | 
						|
   :exc:`OSError` if the system call fails.
 | 
						|
 | 
						|
   .. availability:: Unix, Windows, not WASI.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
   .. versionchanged:: 3.8
 | 
						|
      Windows support was added.
 | 
						|
 | 
						|
   .. note::
 | 
						|
 | 
						|
      On Windows network interfaces have different names in different contexts
 | 
						|
      (all names are examples):
 | 
						|
 | 
						|
      * UUID: ``{FB605B73-AAC2-49A6-9A2F-25416AEA0573}``
 | 
						|
      * name: ``ethernet_32770``
 | 
						|
      * friendly name: ``vEthernet (nat)``
 | 
						|
      * description: ``Hyper-V Virtual Ethernet Adapter``
 | 
						|
 | 
						|
      This function returns names of the second form from the list, ``ethernet_32770``
 | 
						|
      in this example case.
 | 
						|
 | 
						|
 | 
						|
.. function:: if_nametoindex(if_name)
 | 
						|
 | 
						|
   Return a network interface index number corresponding to an
 | 
						|
   interface name.
 | 
						|
   :exc:`OSError` if no interface with the given name exists.
 | 
						|
 | 
						|
   .. availability:: Unix, Windows, not WASI.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
   .. versionchanged:: 3.8
 | 
						|
      Windows support was added.
 | 
						|
 | 
						|
   .. seealso::
 | 
						|
      "Interface name" is a name as documented in :func:`if_nameindex`.
 | 
						|
 | 
						|
 | 
						|
.. function:: if_indextoname(if_index)
 | 
						|
 | 
						|
   Return a network interface name corresponding to an
 | 
						|
   interface index number.
 | 
						|
   :exc:`OSError` if no interface with the given index exists.
 | 
						|
 | 
						|
   .. availability:: Unix, Windows, not WASI.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
   .. versionchanged:: 3.8
 | 
						|
      Windows support was added.
 | 
						|
 | 
						|
   .. seealso::
 | 
						|
      "Interface name" is a name as documented in :func:`if_nameindex`.
 | 
						|
 | 
						|
 | 
						|
.. function:: send_fds(sock, buffers, fds[, flags[, address]])
 | 
						|
 | 
						|
   Send the list of file descriptors *fds* over an :const:`AF_UNIX` socket *sock*.
 | 
						|
   The *fds* parameter is a sequence of file descriptors.
 | 
						|
   Consult :meth:`~socket.sendmsg` for the documentation of these parameters.
 | 
						|
 | 
						|
   .. availability:: Unix, Windows, not WASI.
 | 
						|
 | 
						|
      Unix platforms supporting :meth:`~socket.sendmsg`
 | 
						|
      and :const:`SCM_RIGHTS` mechanism.
 | 
						|
 | 
						|
   .. versionadded:: 3.9
 | 
						|
 | 
						|
 | 
						|
.. function:: recv_fds(sock, bufsize, maxfds[, flags])
 | 
						|
 | 
						|
   Receive up to *maxfds* file descriptors from an :const:`AF_UNIX` socket *sock*.
 | 
						|
   Return ``(msg, list(fds), flags, addr)``.
 | 
						|
   Consult :meth:`~socket.recvmsg` for the documentation of these parameters.
 | 
						|
 | 
						|
   .. availability:: Unix, Windows, not WASI.
 | 
						|
 | 
						|
      Unix platforms supporting :meth:`~socket.sendmsg`
 | 
						|
      and :const:`SCM_RIGHTS` mechanism.
 | 
						|
 | 
						|
   .. versionadded:: 3.9
 | 
						|
 | 
						|
   .. note::
 | 
						|
 | 
						|
      Any truncated integers at the end of the list of file descriptors.
 | 
						|
 | 
						|
 | 
						|
.. _socket-objects:
 | 
						|
 | 
						|
Socket Objects
 | 
						|
--------------
 | 
						|
 | 
						|
Socket objects have the following methods.  Except for
 | 
						|
:meth:`~socket.makefile`, these correspond to Unix system calls applicable
 | 
						|
to sockets.
 | 
						|
 | 
						|
.. versionchanged:: 3.2
 | 
						|
   Support for the :term:`context manager` protocol was added.  Exiting the
 | 
						|
   context manager is equivalent to calling :meth:`~socket.close`.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.accept()
 | 
						|
 | 
						|
   Accept a connection. The socket must be bound to an address and listening for
 | 
						|
   connections. The return value is a pair ``(conn, address)`` where *conn* is a
 | 
						|
   *new* socket object usable to send and receive data on the connection, and
 | 
						|
   *address* is the address bound to the socket on the other end of the connection.
 | 
						|
 | 
						|
   The newly created socket is :ref:`non-inheritable <fd_inheritance>`.
 | 
						|
 | 
						|
   .. versionchanged:: 3.4
 | 
						|
      The socket is now non-inheritable.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      If the system call is interrupted and the signal handler does not raise
 | 
						|
      an exception, the method now retries the system call instead of raising
 | 
						|
      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.bind(address)
 | 
						|
 | 
						|
   Bind the socket to *address*.  The socket must not already be bound. (The format
 | 
						|
   of *address* depends on the address family --- see above.)
 | 
						|
 | 
						|
   .. audit-event:: socket.bind self,address socket.socket.bind
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.close()
 | 
						|
 | 
						|
   Mark the socket closed.  The underlying system resource (e.g. a file
 | 
						|
   descriptor) is also closed when all file objects from :meth:`makefile`
 | 
						|
   are closed.  Once that happens, all future operations on the socket
 | 
						|
   object will fail. The remote end will receive no more data (after
 | 
						|
   queued data is flushed).
 | 
						|
 | 
						|
   Sockets are automatically closed when they are garbage-collected, but
 | 
						|
   it is recommended to :meth:`close` them explicitly, or to use a
 | 
						|
   :keyword:`with` statement around them.
 | 
						|
 | 
						|
   .. versionchanged:: 3.6
 | 
						|
      :exc:`OSError` is now raised if an error occurs when the underlying
 | 
						|
      :c:func:`close` call is made.
 | 
						|
 | 
						|
   .. note::
 | 
						|
 | 
						|
      :meth:`close` releases the resource associated with a connection but
 | 
						|
      does not necessarily close the connection immediately.  If you want
 | 
						|
      to close the connection in a timely fashion, call :meth:`shutdown`
 | 
						|
      before :meth:`close`.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.connect(address)
 | 
						|
 | 
						|
   Connect to a remote socket at *address*. (The format of *address* depends on the
 | 
						|
   address family --- see above.)
 | 
						|
 | 
						|
   If the connection is interrupted by a signal, the method waits until the
 | 
						|
   connection completes, or raise a :exc:`TimeoutError` on timeout, if the
 | 
						|
   signal handler doesn't raise an exception and the socket is blocking or has
 | 
						|
   a timeout. For non-blocking sockets, the method raises an
 | 
						|
   :exc:`InterruptedError` exception if the connection is interrupted by a
 | 
						|
   signal (or the exception raised by the signal handler).
 | 
						|
 | 
						|
   .. audit-event:: socket.connect self,address socket.socket.connect
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      The method now waits until the connection completes instead of raising an
 | 
						|
      :exc:`InterruptedError` exception if the connection is interrupted by a
 | 
						|
      signal, the signal handler doesn't raise an exception and the socket is
 | 
						|
      blocking or has a timeout (see the :pep:`475` for the rationale).
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.connect_ex(address)
 | 
						|
 | 
						|
   Like ``connect(address)``, but return an error indicator instead of raising an
 | 
						|
   exception for errors returned by the C-level :c:func:`connect` call (other
 | 
						|
   problems, such as "host not found," can still raise exceptions).  The error
 | 
						|
   indicator is ``0`` if the operation succeeded, otherwise the value of the
 | 
						|
   :c:data:`errno` variable.  This is useful to support, for example, asynchronous
 | 
						|
   connects.
 | 
						|
 | 
						|
   .. audit-event:: socket.connect self,address socket.socket.connect_ex
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
.. method:: socket.detach()
 | 
						|
 | 
						|
   Put the socket object into closed state without actually closing the
 | 
						|
   underlying file descriptor.  The file descriptor is returned, and can
 | 
						|
   be reused for other purposes.
 | 
						|
 | 
						|
   .. versionadded:: 3.2
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.dup()
 | 
						|
 | 
						|
   Duplicate the socket.
 | 
						|
 | 
						|
   The newly created socket is :ref:`non-inheritable <fd_inheritance>`.
 | 
						|
 | 
						|
   .. versionchanged:: 3.4
 | 
						|
      The socket is now non-inheritable.
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.fileno()
 | 
						|
 | 
						|
   Return the socket's file descriptor (a small integer), or -1 on failure. This
 | 
						|
   is useful with :func:`select.select`.
 | 
						|
 | 
						|
   Under Windows the small integer returned by this method cannot be used where a
 | 
						|
   file descriptor can be used (such as :func:`os.fdopen`).  Unix does not have
 | 
						|
   this limitation.
 | 
						|
 | 
						|
.. method:: socket.get_inheritable()
 | 
						|
 | 
						|
   Get the :ref:`inheritable flag <fd_inheritance>` of the socket's file
 | 
						|
   descriptor or socket's handle: ``True`` if the socket can be inherited in
 | 
						|
   child processes, ``False`` if it cannot.
 | 
						|
 | 
						|
   .. versionadded:: 3.4
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.getpeername()
 | 
						|
 | 
						|
   Return the remote address to which the socket is connected.  This is useful to
 | 
						|
   find out the port number of a remote IPv4/v6 socket, for instance. (The format
 | 
						|
   of the address returned depends on the address family --- see above.)  On some
 | 
						|
   systems this function is not supported.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.getsockname()
 | 
						|
 | 
						|
   Return the socket's own address.  This is useful to find out the port number of
 | 
						|
   an IPv4/v6 socket, for instance. (The format of the address returned depends on
 | 
						|
   the address family --- see above.)
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.getsockopt(level, optname[, buflen])
 | 
						|
 | 
						|
   Return the value of the given socket option (see the Unix man page
 | 
						|
   :manpage:`getsockopt(2)`).  The needed symbolic constants (:ref:`SO_\* etc. <socket-unix-constants>`)
 | 
						|
   are defined in this module.  If *buflen* is absent, an integer option is assumed
 | 
						|
   and its integer value is returned by the function.  If *buflen* is present, it
 | 
						|
   specifies the maximum length of the buffer used to receive the option in, and
 | 
						|
   this buffer is returned as a bytes object.  It is up to the caller to decode the
 | 
						|
   contents of the buffer (see the optional built-in module :mod:`struct` for a way
 | 
						|
   to decode C structures encoded as byte strings).
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.getblocking()
 | 
						|
 | 
						|
   Return ``True`` if socket is in blocking mode, ``False`` if in
 | 
						|
   non-blocking.
 | 
						|
 | 
						|
   This is equivalent to checking ``socket.gettimeout() != 0``.
 | 
						|
 | 
						|
   .. versionadded:: 3.7
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.gettimeout()
 | 
						|
 | 
						|
   Return the timeout in seconds (float) associated with socket operations,
 | 
						|
   or ``None`` if no timeout is set.  This reflects the last call to
 | 
						|
   :meth:`setblocking` or :meth:`settimeout`.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.ioctl(control, option)
 | 
						|
 | 
						|
   :platform: Windows
 | 
						|
 | 
						|
   The :meth:`ioctl` method is a limited interface to the WSAIoctl system
 | 
						|
   interface.  Please refer to the `Win32 documentation
 | 
						|
   <https://msdn.microsoft.com/en-us/library/ms741621%28VS.85%29.aspx>`_ for more
 | 
						|
   information.
 | 
						|
 | 
						|
   On other platforms, the generic :func:`fcntl.fcntl` and :func:`fcntl.ioctl`
 | 
						|
   functions may be used; they accept a socket object as their first argument.
 | 
						|
 | 
						|
   Currently only the following control codes are supported:
 | 
						|
   ``SIO_RCVALL``, ``SIO_KEEPALIVE_VALS``, and ``SIO_LOOPBACK_FAST_PATH``.
 | 
						|
 | 
						|
   .. versionchanged:: 3.6
 | 
						|
      ``SIO_LOOPBACK_FAST_PATH`` was added.
 | 
						|
 | 
						|
.. method:: socket.listen([backlog])
 | 
						|
 | 
						|
   Enable a server to accept connections.  If *backlog* is specified, it must
 | 
						|
   be at least 0 (if it is lower, it is set to 0); it specifies the number of
 | 
						|
   unaccepted connections that the system will allow before refusing new
 | 
						|
   connections. If not specified, a default reasonable value is chosen.
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      The *backlog* parameter is now optional.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.makefile(mode='r', buffering=None, *, encoding=None, \
 | 
						|
                            errors=None, newline=None)
 | 
						|
 | 
						|
   .. index:: single: I/O control; buffering
 | 
						|
 | 
						|
   Return a :term:`file object` associated with the socket.  The exact returned
 | 
						|
   type depends on the arguments given to :meth:`makefile`.  These arguments are
 | 
						|
   interpreted the same way as by the built-in :func:`open` function, except
 | 
						|
   the only supported *mode* values are ``'r'`` (default), ``'w'``, ``'b'``, or
 | 
						|
   a combination of those.
 | 
						|
 | 
						|
   The socket must be in blocking mode; it can have a timeout, but the file
 | 
						|
   object's internal buffer may end up in an inconsistent state if a timeout
 | 
						|
   occurs.
 | 
						|
 | 
						|
   Closing the file object returned by :meth:`makefile` won't close the
 | 
						|
   original socket unless all other file objects have been closed and
 | 
						|
   :meth:`socket.close` has been called on the socket object.
 | 
						|
 | 
						|
   .. note::
 | 
						|
 | 
						|
      On Windows, the file-like object created by :meth:`makefile` cannot be
 | 
						|
      used where a file object with a file descriptor is expected, such as the
 | 
						|
      stream arguments of :meth:`subprocess.Popen`.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.recv(bufsize[, flags])
 | 
						|
 | 
						|
   Receive data from the socket.  The return value is a bytes object representing the
 | 
						|
   data received.  The maximum amount of data to be received at once is specified
 | 
						|
   by *bufsize*. A returned empty bytes object indicates that the client has disconnected.
 | 
						|
   See the Unix manual page :manpage:`recv(2)` for the meaning of the optional argument
 | 
						|
   *flags*; it defaults to zero.
 | 
						|
 | 
						|
   .. note::
 | 
						|
 | 
						|
      For best match with hardware and network realities, the value of  *bufsize*
 | 
						|
      should be a relatively small power of 2, for example, 4096.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      If the system call is interrupted and the signal handler does not raise
 | 
						|
      an exception, the method now retries the system call instead of raising
 | 
						|
      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.recvfrom(bufsize[, flags])
 | 
						|
 | 
						|
   Receive data from the socket.  The return value is a pair ``(bytes, address)``
 | 
						|
   where *bytes* is a bytes object representing the data received and *address* is the
 | 
						|
   address of the socket sending the data.  See the Unix manual page
 | 
						|
   :manpage:`recv(2)` for the meaning of the optional argument *flags*; it defaults
 | 
						|
   to zero. (The format of *address* depends on the address family --- see above.)
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      If the system call is interrupted and the signal handler does not raise
 | 
						|
      an exception, the method now retries the system call instead of raising
 | 
						|
      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 | 
						|
 | 
						|
   .. versionchanged:: 3.7
 | 
						|
      For multicast IPv6 address, first item of *address* does not contain
 | 
						|
      ``%scope_id`` part anymore. In order to get full IPv6 address use
 | 
						|
      :func:`getnameinfo`.
 | 
						|
 | 
						|
.. method:: socket.recvmsg(bufsize[, ancbufsize[, flags]])
 | 
						|
 | 
						|
   Receive normal data (up to *bufsize* bytes) and ancillary data from
 | 
						|
   the socket.  The *ancbufsize* argument sets the size in bytes of
 | 
						|
   the internal buffer used to receive the ancillary data; it defaults
 | 
						|
   to 0, meaning that no ancillary data will be received.  Appropriate
 | 
						|
   buffer sizes for ancillary data can be calculated using
 | 
						|
   :func:`CMSG_SPACE` or :func:`CMSG_LEN`, and items which do not fit
 | 
						|
   into the buffer might be truncated or discarded.  The *flags*
 | 
						|
   argument defaults to 0 and has the same meaning as for
 | 
						|
   :meth:`recv`.
 | 
						|
 | 
						|
   The return value is a 4-tuple: ``(data, ancdata, msg_flags,
 | 
						|
   address)``.  The *data* item is a :class:`bytes` object holding the
 | 
						|
   non-ancillary data received.  The *ancdata* item is a list of zero
 | 
						|
   or more tuples ``(cmsg_level, cmsg_type, cmsg_data)`` representing
 | 
						|
   the ancillary data (control messages) received: *cmsg_level* and
 | 
						|
   *cmsg_type* are integers specifying the protocol level and
 | 
						|
   protocol-specific type respectively, and *cmsg_data* is a
 | 
						|
   :class:`bytes` object holding the associated data.  The *msg_flags*
 | 
						|
   item is the bitwise OR of various flags indicating conditions on
 | 
						|
   the received message; see your system documentation for details.
 | 
						|
   If the receiving socket is unconnected, *address* is the address of
 | 
						|
   the sending socket, if available; otherwise, its value is
 | 
						|
   unspecified.
 | 
						|
 | 
						|
   On some systems, :meth:`sendmsg` and :meth:`recvmsg` can be used to
 | 
						|
   pass file descriptors between processes over an :const:`AF_UNIX`
 | 
						|
   socket.  When this facility is used (it is often restricted to
 | 
						|
   :const:`SOCK_STREAM` sockets), :meth:`recvmsg` will return, in its
 | 
						|
   ancillary data, items of the form ``(socket.SOL_SOCKET,
 | 
						|
   socket.SCM_RIGHTS, fds)``, where *fds* is a :class:`bytes` object
 | 
						|
   representing the new file descriptors as a binary array of the
 | 
						|
   native C :c:expr:`int` type.  If :meth:`recvmsg` raises an
 | 
						|
   exception after the system call returns, it will first attempt to
 | 
						|
   close any file descriptors received via this mechanism.
 | 
						|
 | 
						|
   Some systems do not indicate the truncated length of ancillary data
 | 
						|
   items which have been only partially received.  If an item appears
 | 
						|
   to extend beyond the end of the buffer, :meth:`recvmsg` will issue
 | 
						|
   a :exc:`RuntimeWarning`, and will return the part of it which is
 | 
						|
   inside the buffer provided it has not been truncated before the
 | 
						|
   start of its associated data.
 | 
						|
 | 
						|
   On systems which support the :const:`SCM_RIGHTS` mechanism, the
 | 
						|
   following function will receive up to *maxfds* file descriptors,
 | 
						|
   returning the message data and a list containing the descriptors
 | 
						|
   (while ignoring unexpected conditions such as unrelated control
 | 
						|
   messages being received).  See also :meth:`sendmsg`. ::
 | 
						|
 | 
						|
      import socket, array
 | 
						|
 | 
						|
      def recv_fds(sock, msglen, maxfds):
 | 
						|
          fds = array.array("i")   # Array of ints
 | 
						|
          msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize))
 | 
						|
          for cmsg_level, cmsg_type, cmsg_data in ancdata:
 | 
						|
              if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS:
 | 
						|
                  # Append data, ignoring any truncated integers at the end.
 | 
						|
                  fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
 | 
						|
          return msg, list(fds)
 | 
						|
 | 
						|
   .. availability:: Unix.
 | 
						|
 | 
						|
      Most Unix platforms.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      If the system call is interrupted and the signal handler does not raise
 | 
						|
      an exception, the method now retries the system call instead of raising
 | 
						|
      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.recvmsg_into(buffers[, ancbufsize[, flags]])
 | 
						|
 | 
						|
   Receive normal data and ancillary data from the socket, behaving as
 | 
						|
   :meth:`recvmsg` would, but scatter the non-ancillary data into a
 | 
						|
   series of buffers instead of returning a new bytes object.  The
 | 
						|
   *buffers* argument must be an iterable of objects that export
 | 
						|
   writable buffers (e.g. :class:`bytearray` objects); these will be
 | 
						|
   filled with successive chunks of the non-ancillary data until it
 | 
						|
   has all been written or there are no more buffers.  The operating
 | 
						|
   system may set a limit (:func:`~os.sysconf` value ``SC_IOV_MAX``)
 | 
						|
   on the number of buffers that can be used.  The *ancbufsize* and
 | 
						|
   *flags* arguments have the same meaning as for :meth:`recvmsg`.
 | 
						|
 | 
						|
   The return value is a 4-tuple: ``(nbytes, ancdata, msg_flags,
 | 
						|
   address)``, where *nbytes* is the total number of bytes of
 | 
						|
   non-ancillary data written into the buffers, and *ancdata*,
 | 
						|
   *msg_flags* and *address* are the same as for :meth:`recvmsg`.
 | 
						|
 | 
						|
   Example::
 | 
						|
 | 
						|
      >>> import socket
 | 
						|
      >>> s1, s2 = socket.socketpair()
 | 
						|
      >>> b1 = bytearray(b'----')
 | 
						|
      >>> b2 = bytearray(b'0123456789')
 | 
						|
      >>> b3 = bytearray(b'--------------')
 | 
						|
      >>> s1.send(b'Mary had a little lamb')
 | 
						|
      22
 | 
						|
      >>> s2.recvmsg_into([b1, memoryview(b2)[2:9], b3])
 | 
						|
      (22, [], 0, None)
 | 
						|
      >>> [b1, b2, b3]
 | 
						|
      [bytearray(b'Mary'), bytearray(b'01 had a 9'), bytearray(b'little lamb---')]
 | 
						|
 | 
						|
   .. availability:: Unix.
 | 
						|
 | 
						|
      Most Unix platforms.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.recvfrom_into(buffer[, nbytes[, flags]])
 | 
						|
 | 
						|
   Receive data from the socket, writing it into *buffer* instead of creating a
 | 
						|
   new bytestring.  The return value is a pair ``(nbytes, address)`` where *nbytes* is
 | 
						|
   the number of bytes received and *address* is the address of the socket sending
 | 
						|
   the data.  See the Unix manual page :manpage:`recv(2)` for the meaning of the
 | 
						|
   optional argument *flags*; it defaults to zero.  (The format of *address*
 | 
						|
   depends on the address family --- see above.)
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.recv_into(buffer[, nbytes[, flags]])
 | 
						|
 | 
						|
   Receive up to *nbytes* bytes from the socket, storing the data into a buffer
 | 
						|
   rather than creating a new bytestring.  If *nbytes* is not specified (or 0),
 | 
						|
   receive up to the size available in the given buffer.  Returns the number of
 | 
						|
   bytes received.  See the Unix manual page :manpage:`recv(2)` for the meaning
 | 
						|
   of the optional argument *flags*; it defaults to zero.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.send(bytes[, flags])
 | 
						|
 | 
						|
   Send data to the socket.  The socket must be connected to a remote socket.  The
 | 
						|
   optional *flags* argument has the same meaning as for :meth:`recv` above.
 | 
						|
   Returns the number of bytes sent. Applications are responsible for checking that
 | 
						|
   all data has been sent; if only some of the data was transmitted, the
 | 
						|
   application needs to attempt delivery of the remaining data. For further
 | 
						|
   information on this topic, consult the :ref:`socket-howto`.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      If the system call is interrupted and the signal handler does not raise
 | 
						|
      an exception, the method now retries the system call instead of raising
 | 
						|
      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.sendall(bytes[, flags])
 | 
						|
 | 
						|
   Send data to the socket.  The socket must be connected to a remote socket.  The
 | 
						|
   optional *flags* argument has the same meaning as for :meth:`recv` above.
 | 
						|
   Unlike :meth:`send`, this method continues to send data from *bytes* until
 | 
						|
   either all data has been sent or an error occurs.  ``None`` is returned on
 | 
						|
   success.  On error, an exception is raised, and there is no way to determine how
 | 
						|
   much data, if any, was successfully sent.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      The socket timeout is no longer reset each time data is sent successfully.
 | 
						|
      The socket timeout is now the maximum total duration to send all data.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      If the system call is interrupted and the signal handler does not raise
 | 
						|
      an exception, the method now retries the system call instead of raising
 | 
						|
      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.sendto(bytes, address)
 | 
						|
            socket.sendto(bytes, flags, address)
 | 
						|
 | 
						|
   Send data to the socket.  The socket should not be connected to a remote socket,
 | 
						|
   since the destination socket is specified by *address*.  The optional *flags*
 | 
						|
   argument has the same meaning as for :meth:`recv` above.  Return the number of
 | 
						|
   bytes sent. (The format of *address* depends on the address family --- see
 | 
						|
   above.)
 | 
						|
 | 
						|
   .. audit-event:: socket.sendto self,address socket.socket.sendto
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      If the system call is interrupted and the signal handler does not raise
 | 
						|
      an exception, the method now retries the system call instead of raising
 | 
						|
      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.sendmsg(buffers[, ancdata[, flags[, address]]])
 | 
						|
 | 
						|
   Send normal and ancillary data to the socket, gathering the
 | 
						|
   non-ancillary data from a series of buffers and concatenating it
 | 
						|
   into a single message.  The *buffers* argument specifies the
 | 
						|
   non-ancillary data as an iterable of
 | 
						|
   :term:`bytes-like objects <bytes-like object>`
 | 
						|
   (e.g. :class:`bytes` objects); the operating system may set a limit
 | 
						|
   (:func:`~os.sysconf` value ``SC_IOV_MAX``) on the number of buffers
 | 
						|
   that can be used.  The *ancdata* argument specifies the ancillary
 | 
						|
   data (control messages) as an iterable of zero or more tuples
 | 
						|
   ``(cmsg_level, cmsg_type, cmsg_data)``, where *cmsg_level* and
 | 
						|
   *cmsg_type* are integers specifying the protocol level and
 | 
						|
   protocol-specific type respectively, and *cmsg_data* is a
 | 
						|
   bytes-like object holding the associated data.  Note that
 | 
						|
   some systems (in particular, systems without :func:`CMSG_SPACE`)
 | 
						|
   might support sending only one control message per call.  The
 | 
						|
   *flags* argument defaults to 0 and has the same meaning as for
 | 
						|
   :meth:`send`.  If *address* is supplied and not ``None``, it sets a
 | 
						|
   destination address for the message.  The return value is the
 | 
						|
   number of bytes of non-ancillary data sent.
 | 
						|
 | 
						|
   The following function sends the list of file descriptors *fds*
 | 
						|
   over an :const:`AF_UNIX` socket, on systems which support the
 | 
						|
   :const:`SCM_RIGHTS` mechanism.  See also :meth:`recvmsg`. ::
 | 
						|
 | 
						|
      import socket, array
 | 
						|
 | 
						|
      def send_fds(sock, msg, fds):
 | 
						|
          return sock.sendmsg([msg], [(socket.SOL_SOCKET, socket.SCM_RIGHTS, array.array("i", fds))])
 | 
						|
 | 
						|
   .. availability:: Unix, not WASI.
 | 
						|
 | 
						|
      Most Unix platforms.
 | 
						|
 | 
						|
   .. audit-event:: socket.sendmsg self,address socket.socket.sendmsg
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      If the system call is interrupted and the signal handler does not raise
 | 
						|
      an exception, the method now retries the system call instead of raising
 | 
						|
      an :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
 | 
						|
 | 
						|
.. method:: socket.sendmsg_afalg([msg], *, op[, iv[, assoclen[, flags]]])
 | 
						|
 | 
						|
   Specialized version of :meth:`~socket.sendmsg` for :const:`AF_ALG` socket.
 | 
						|
   Set mode, IV, AEAD associated data length and flags for :const:`AF_ALG` socket.
 | 
						|
 | 
						|
   .. availability:: Linux >= 2.6.38.
 | 
						|
 | 
						|
   .. versionadded:: 3.6
 | 
						|
 | 
						|
.. method:: socket.sendfile(file, offset=0, count=None)
 | 
						|
 | 
						|
   Send a file until EOF is reached by using high-performance
 | 
						|
   :mod:`os.sendfile` and return the total number of bytes which were sent.
 | 
						|
   *file* must be a regular file object opened in binary mode. If
 | 
						|
   :mod:`os.sendfile` is not available (e.g. Windows) or *file* is not a
 | 
						|
   regular file :meth:`send` will be used instead. *offset* tells from where to
 | 
						|
   start reading the file. If specified, *count* is the total number of bytes
 | 
						|
   to transmit as opposed to sending the file until EOF is reached. File
 | 
						|
   position is updated on return or also in case of error in which case
 | 
						|
   :meth:`file.tell() <io.IOBase.tell>` can be used to figure out the number of
 | 
						|
   bytes which were sent. The socket must be of :const:`SOCK_STREAM` type.
 | 
						|
   Non-blocking sockets are not supported.
 | 
						|
 | 
						|
   .. versionadded:: 3.5
 | 
						|
 | 
						|
.. method:: socket.set_inheritable(inheritable)
 | 
						|
 | 
						|
   Set the :ref:`inheritable flag <fd_inheritance>` of the socket's file
 | 
						|
   descriptor or socket's handle.
 | 
						|
 | 
						|
   .. versionadded:: 3.4
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.setblocking(flag)
 | 
						|
 | 
						|
   Set blocking or non-blocking mode of the socket: if *flag* is false, the
 | 
						|
   socket is set to non-blocking, else to blocking mode.
 | 
						|
 | 
						|
   This method is a shorthand for certain :meth:`~socket.settimeout` calls:
 | 
						|
 | 
						|
   * ``sock.setblocking(True)`` is equivalent to ``sock.settimeout(None)``
 | 
						|
 | 
						|
   * ``sock.setblocking(False)`` is equivalent to ``sock.settimeout(0.0)``
 | 
						|
 | 
						|
   .. versionchanged:: 3.7
 | 
						|
      The method no longer applies :const:`SOCK_NONBLOCK` flag on
 | 
						|
      :attr:`socket.type`.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.settimeout(value)
 | 
						|
 | 
						|
   Set a timeout on blocking socket operations.  The *value* argument can be a
 | 
						|
   nonnegative floating-point number expressing seconds, or ``None``.
 | 
						|
   If a non-zero value is given, subsequent socket operations will raise a
 | 
						|
   :exc:`timeout` exception if the timeout period *value* has elapsed before
 | 
						|
   the operation has completed.  If zero is given, the socket is put in
 | 
						|
   non-blocking mode. If ``None`` is given, the socket is put in blocking mode.
 | 
						|
 | 
						|
   For further information, please consult the :ref:`notes on socket timeouts <socket-timeouts>`.
 | 
						|
 | 
						|
   .. versionchanged:: 3.7
 | 
						|
      The method no longer toggles :const:`SOCK_NONBLOCK` flag on
 | 
						|
      :attr:`socket.type`.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.setsockopt(level, optname, value: int)
 | 
						|
.. method:: socket.setsockopt(level, optname, value: buffer)
 | 
						|
   :noindex:
 | 
						|
.. method:: socket.setsockopt(level, optname, None, optlen: int)
 | 
						|
   :noindex:
 | 
						|
 | 
						|
   .. index:: pair: module; struct
 | 
						|
 | 
						|
   Set the value of the given socket option (see the Unix manual page
 | 
						|
   :manpage:`setsockopt(2)`).  The needed symbolic constants are defined in this
 | 
						|
   module (:ref:`!SO_\* etc. <socket-unix-constants>`).  The value can be an integer,
 | 
						|
   ``None`` or a :term:`bytes-like object` representing a buffer. In the later
 | 
						|
   case it is up to the caller to ensure that the bytestring contains the
 | 
						|
   proper bits (see the optional built-in module :mod:`struct` for a way to
 | 
						|
   encode C structures as bytestrings). When *value* is set to ``None``,
 | 
						|
   *optlen* argument is required. It's equivalent to call :c:func:`setsockopt` C
 | 
						|
   function with ``optval=NULL`` and ``optlen=optlen``.
 | 
						|
 | 
						|
   .. versionchanged:: 3.5
 | 
						|
      Writable :term:`bytes-like object` is now accepted.
 | 
						|
 | 
						|
   .. versionchanged:: 3.6
 | 
						|
      setsockopt(level, optname, None, optlen: int) form added.
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.shutdown(how)
 | 
						|
 | 
						|
   Shut down one or both halves of the connection.  If *how* is :const:`SHUT_RD`,
 | 
						|
   further receives are disallowed.  If *how* is :const:`SHUT_WR`, further sends
 | 
						|
   are disallowed.  If *how* is :const:`SHUT_RDWR`, further sends and receives are
 | 
						|
   disallowed.
 | 
						|
 | 
						|
   .. availability:: not WASI.
 | 
						|
 | 
						|
 | 
						|
.. method:: socket.share(process_id)
 | 
						|
 | 
						|
   Duplicate a socket and prepare it for sharing with a target process.  The
 | 
						|
   target process must be provided with *process_id*.  The resulting bytes object
 | 
						|
   can then be passed to the target process using some form of interprocess
 | 
						|
   communication and the socket can be recreated there using :func:`fromshare`.
 | 
						|
   Once this method has been called, it is safe to close the socket since
 | 
						|
   the operating system has already duplicated it for the target process.
 | 
						|
 | 
						|
   .. availability:: Windows.
 | 
						|
 | 
						|
   .. versionadded:: 3.3
 | 
						|
 | 
						|
 | 
						|
Note that there are no methods :meth:`read` or :meth:`write`; use
 | 
						|
:meth:`~socket.recv` and :meth:`~socket.send` without *flags* argument instead.
 | 
						|
 | 
						|
Socket objects also have these (read-only) attributes that correspond to the
 | 
						|
values given to the :class:`~socket.socket` constructor.
 | 
						|
 | 
						|
 | 
						|
.. attribute:: socket.family
 | 
						|
 | 
						|
   The socket family.
 | 
						|
 | 
						|
 | 
						|
.. attribute:: socket.type
 | 
						|
 | 
						|
   The socket type.
 | 
						|
 | 
						|
 | 
						|
.. attribute:: socket.proto
 | 
						|
 | 
						|
   The socket protocol.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
.. _socket-timeouts:
 | 
						|
 | 
						|
Notes on socket timeouts
 | 
						|
------------------------
 | 
						|
 | 
						|
A socket object can be in one of three modes: blocking, non-blocking, or
 | 
						|
timeout.  Sockets are by default always created in blocking mode, but this
 | 
						|
can be changed by calling :func:`setdefaulttimeout`.
 | 
						|
 | 
						|
* In *blocking mode*, operations block until complete or the system returns
 | 
						|
  an error (such as connection timed out).
 | 
						|
 | 
						|
* In *non-blocking mode*, operations fail (with an error that is unfortunately
 | 
						|
  system-dependent) if they cannot be completed immediately: functions from the
 | 
						|
  :mod:`select` module can be used to know when and whether a socket is available
 | 
						|
  for reading or writing.
 | 
						|
 | 
						|
* In *timeout mode*, operations fail if they cannot be completed within the
 | 
						|
  timeout specified for the socket (they raise a :exc:`timeout` exception)
 | 
						|
  or if the system returns an error.
 | 
						|
 | 
						|
.. note::
 | 
						|
   At the operating system level, sockets in *timeout mode* are internally set
 | 
						|
   in non-blocking mode.  Also, the blocking and timeout modes are shared between
 | 
						|
   file descriptors and socket objects that refer to the same network endpoint.
 | 
						|
   This implementation detail can have visible consequences if e.g. you decide
 | 
						|
   to use the :meth:`~socket.fileno` of a socket.
 | 
						|
 | 
						|
Timeouts and the ``connect`` method
 | 
						|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
The :meth:`~socket.connect` operation is also subject to the timeout
 | 
						|
setting, and in general it is recommended to call :meth:`~socket.settimeout`
 | 
						|
before calling :meth:`~socket.connect` or pass a timeout parameter to
 | 
						|
:meth:`create_connection`.  However, the system network stack may also
 | 
						|
return a connection timeout error of its own regardless of any Python socket
 | 
						|
timeout setting.
 | 
						|
 | 
						|
Timeouts and the ``accept`` method
 | 
						|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
						|
 | 
						|
If :func:`getdefaulttimeout` is not :const:`None`, sockets returned by
 | 
						|
the :meth:`~socket.accept` method inherit that timeout.  Otherwise, the
 | 
						|
behaviour depends on settings of the listening socket:
 | 
						|
 | 
						|
* if the listening socket is in *blocking mode* or in *timeout mode*,
 | 
						|
  the socket returned by :meth:`~socket.accept` is in *blocking mode*;
 | 
						|
 | 
						|
* if the listening socket is in *non-blocking mode*, whether the socket
 | 
						|
  returned by :meth:`~socket.accept` is in blocking or non-blocking mode
 | 
						|
  is operating system-dependent.  If you want to ensure cross-platform
 | 
						|
  behaviour, it is recommended you manually override this setting.
 | 
						|
 | 
						|
 | 
						|
.. _socket-example:
 | 
						|
 | 
						|
Example
 | 
						|
-------
 | 
						|
 | 
						|
Here are four minimal example programs using the TCP/IP protocol: a server that
 | 
						|
echoes all data that it receives back (servicing only one client), and a client
 | 
						|
using it.  Note that a server must perform the sequence :func:`~socket.socket`,
 | 
						|
:meth:`~socket.bind`, :meth:`~socket.listen`, :meth:`~socket.accept` (possibly
 | 
						|
repeating the :meth:`~socket.accept` to service more than one client), while a
 | 
						|
client only needs the sequence :func:`~socket.socket`, :meth:`~socket.connect`.  Also
 | 
						|
note that the server does not :meth:`~socket.sendall`/:meth:`~socket.recv` on
 | 
						|
the socket it is listening on but on the new socket returned by
 | 
						|
:meth:`~socket.accept`.
 | 
						|
 | 
						|
The first two examples support IPv4 only. ::
 | 
						|
 | 
						|
   # Echo server program
 | 
						|
   import socket
 | 
						|
 | 
						|
   HOST = ''                 # Symbolic name meaning all available interfaces
 | 
						|
   PORT = 50007              # Arbitrary non-privileged port
 | 
						|
   with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
 | 
						|
       s.bind((HOST, PORT))
 | 
						|
       s.listen(1)
 | 
						|
       conn, addr = s.accept()
 | 
						|
       with conn:
 | 
						|
           print('Connected by', addr)
 | 
						|
           while True:
 | 
						|
               data = conn.recv(1024)
 | 
						|
               if not data: break
 | 
						|
               conn.sendall(data)
 | 
						|
 | 
						|
::
 | 
						|
 | 
						|
   # Echo client program
 | 
						|
   import socket
 | 
						|
 | 
						|
   HOST = 'daring.cwi.nl'    # The remote host
 | 
						|
   PORT = 50007              # The same port as used by the server
 | 
						|
   with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
 | 
						|
       s.connect((HOST, PORT))
 | 
						|
       s.sendall(b'Hello, world')
 | 
						|
       data = s.recv(1024)
 | 
						|
   print('Received', repr(data))
 | 
						|
 | 
						|
The next two examples are identical to the above two, but support both IPv4 and
 | 
						|
IPv6. The server side will listen to the first address family available (it
 | 
						|
should listen to both instead). On most of IPv6-ready systems, IPv6 will take
 | 
						|
precedence and the server may not accept IPv4 traffic. The client side will try
 | 
						|
to connect to all the addresses returned as a result of the name resolution, and
 | 
						|
sends traffic to the first one connected successfully. ::
 | 
						|
 | 
						|
   # Echo server program
 | 
						|
   import socket
 | 
						|
   import sys
 | 
						|
 | 
						|
   HOST = None               # Symbolic name meaning all available interfaces
 | 
						|
   PORT = 50007              # Arbitrary non-privileged port
 | 
						|
   s = None
 | 
						|
   for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,
 | 
						|
                                 socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
 | 
						|
       af, socktype, proto, canonname, sa = res
 | 
						|
       try:
 | 
						|
           s = socket.socket(af, socktype, proto)
 | 
						|
       except OSError as msg:
 | 
						|
           s = None
 | 
						|
           continue
 | 
						|
       try:
 | 
						|
           s.bind(sa)
 | 
						|
           s.listen(1)
 | 
						|
       except OSError as msg:
 | 
						|
           s.close()
 | 
						|
           s = None
 | 
						|
           continue
 | 
						|
       break
 | 
						|
   if s is None:
 | 
						|
       print('could not open socket')
 | 
						|
       sys.exit(1)
 | 
						|
   conn, addr = s.accept()
 | 
						|
   with conn:
 | 
						|
       print('Connected by', addr)
 | 
						|
       while True:
 | 
						|
           data = conn.recv(1024)
 | 
						|
           if not data: break
 | 
						|
           conn.send(data)
 | 
						|
 | 
						|
::
 | 
						|
 | 
						|
   # Echo client program
 | 
						|
   import socket
 | 
						|
   import sys
 | 
						|
 | 
						|
   HOST = 'daring.cwi.nl'    # The remote host
 | 
						|
   PORT = 50007              # The same port as used by the server
 | 
						|
   s = None
 | 
						|
   for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
 | 
						|
       af, socktype, proto, canonname, sa = res
 | 
						|
       try:
 | 
						|
           s = socket.socket(af, socktype, proto)
 | 
						|
       except OSError as msg:
 | 
						|
           s = None
 | 
						|
           continue
 | 
						|
       try:
 | 
						|
           s.connect(sa)
 | 
						|
       except OSError as msg:
 | 
						|
           s.close()
 | 
						|
           s = None
 | 
						|
           continue
 | 
						|
       break
 | 
						|
   if s is None:
 | 
						|
       print('could not open socket')
 | 
						|
       sys.exit(1)
 | 
						|
   with s:
 | 
						|
       s.sendall(b'Hello, world')
 | 
						|
       data = s.recv(1024)
 | 
						|
   print('Received', repr(data))
 | 
						|
 | 
						|
The next example shows how to write a very simple network sniffer with raw
 | 
						|
sockets on Windows. The example requires administrator privileges to modify
 | 
						|
the interface::
 | 
						|
 | 
						|
   import socket
 | 
						|
 | 
						|
   # the public network interface
 | 
						|
   HOST = socket.gethostbyname(socket.gethostname())
 | 
						|
 | 
						|
   # create a raw socket and bind it to the public interface
 | 
						|
   s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
 | 
						|
   s.bind((HOST, 0))
 | 
						|
 | 
						|
   # Include IP headers
 | 
						|
   s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
 | 
						|
 | 
						|
   # receive all packets
 | 
						|
   s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
 | 
						|
 | 
						|
   # receive a packet
 | 
						|
   print(s.recvfrom(65565))
 | 
						|
 | 
						|
   # disabled promiscuous mode
 | 
						|
   s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
 | 
						|
 | 
						|
The next example shows how to use the socket interface to communicate to a CAN
 | 
						|
network using the raw socket protocol. To use CAN with the broadcast
 | 
						|
manager protocol instead, open a socket with::
 | 
						|
 | 
						|
    socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_BCM)
 | 
						|
 | 
						|
After binding (:const:`CAN_RAW`) or connecting (:const:`CAN_BCM`) the socket, you
 | 
						|
can use the :meth:`socket.send` and :meth:`socket.recv` operations (and
 | 
						|
their counterparts) on the socket object as usual.
 | 
						|
 | 
						|
This last example might require special privileges::
 | 
						|
 | 
						|
   import socket
 | 
						|
   import struct
 | 
						|
 | 
						|
 | 
						|
   # CAN frame packing/unpacking (see 'struct can_frame' in <linux/can.h>)
 | 
						|
 | 
						|
   can_frame_fmt = "=IB3x8s"
 | 
						|
   can_frame_size = struct.calcsize(can_frame_fmt)
 | 
						|
 | 
						|
   def build_can_frame(can_id, data):
 | 
						|
       can_dlc = len(data)
 | 
						|
       data = data.ljust(8, b'\x00')
 | 
						|
       return struct.pack(can_frame_fmt, can_id, can_dlc, data)
 | 
						|
 | 
						|
   def dissect_can_frame(frame):
 | 
						|
       can_id, can_dlc, data = struct.unpack(can_frame_fmt, frame)
 | 
						|
       return (can_id, can_dlc, data[:can_dlc])
 | 
						|
 | 
						|
 | 
						|
   # create a raw socket and bind it to the 'vcan0' interface
 | 
						|
   s = socket.socket(socket.AF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
 | 
						|
   s.bind(('vcan0',))
 | 
						|
 | 
						|
   while True:
 | 
						|
       cf, addr = s.recvfrom(can_frame_size)
 | 
						|
 | 
						|
       print('Received: can_id=%x, can_dlc=%x, data=%s' % dissect_can_frame(cf))
 | 
						|
 | 
						|
       try:
 | 
						|
           s.send(cf)
 | 
						|
       except OSError:
 | 
						|
           print('Error sending CAN frame')
 | 
						|
 | 
						|
       try:
 | 
						|
           s.send(build_can_frame(0x01, b'\x01\x02\x03'))
 | 
						|
       except OSError:
 | 
						|
           print('Error sending CAN frame')
 | 
						|
 | 
						|
Running an example several times with too small delay between executions, could
 | 
						|
lead to this error::
 | 
						|
 | 
						|
   OSError: [Errno 98] Address already in use
 | 
						|
 | 
						|
This is because the previous execution has left the socket in a ``TIME_WAIT``
 | 
						|
state, and can't be immediately reused.
 | 
						|
 | 
						|
There is a :mod:`socket` flag to set, in order to prevent this,
 | 
						|
:const:`socket.SO_REUSEADDR`::
 | 
						|
 | 
						|
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 | 
						|
   s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 | 
						|
   s.bind((HOST, PORT))
 | 
						|
 | 
						|
the :data:`SO_REUSEADDR` flag tells the kernel to reuse a local socket in
 | 
						|
``TIME_WAIT`` state, without waiting for its natural timeout to expire.
 | 
						|
 | 
						|
 | 
						|
.. seealso::
 | 
						|
 | 
						|
   For an introduction to socket programming (in C), see the following papers:
 | 
						|
 | 
						|
   - *An Introductory 4.3BSD Interprocess Communication Tutorial*, by Stuart Sechrest
 | 
						|
 | 
						|
   - *An Advanced 4.3BSD Interprocess Communication Tutorial*, by Samuel J.  Leffler et
 | 
						|
     al,
 | 
						|
 | 
						|
   both in the UNIX Programmer's Manual, Supplementary Documents 1 (sections
 | 
						|
   PS1:7 and PS1:8).  The platform-specific reference material for the various
 | 
						|
   socket-related system calls are also a valuable source of information on the
 | 
						|
   details of socket semantics.  For Unix, refer to the manual pages; for Windows,
 | 
						|
   see the WinSock (or Winsock 2) specification.  For IPv6-ready APIs, readers may
 | 
						|
   want to refer to :rfc:`3493` titled Basic Socket Interface Extensions for IPv6.
 |