Files
typeshed/stdlib/_socket.pyi
T
2026-04-01 17:54:51 +02:00

859 lines
27 KiB
Python

import sys
from _typeshed import ReadableBuffer, WriteableBuffer
from collections.abc import Iterable
from socket import error as error, gaierror as gaierror, herror as herror, timeout as timeout
from typing import Any, Final, SupportsIndex, overload
from typing_extensions import CapsuleType, TypeAlias, disjoint_base
_CMSG: TypeAlias = tuple[int, int, bytes]
_CMSGArg: TypeAlias = tuple[int, int, ReadableBuffer]
# Addresses can be either tuples of varying lengths (AF_INET, AF_INET6,
# AF_NETLINK, AF_TIPC) or strings/buffers (AF_UNIX).
# See getsockaddrarg() in socketmodule.c.
_Address: TypeAlias = tuple[Any, ...] | str | ReadableBuffer
_RetAddress: TypeAlias = Any
# ===== Constants =====
# This matches the order in the CPython documentation
# https://docs.python.org/3/library/socket.html#constants
if sys.platform != "win32":
AF_UNIX: Final[int]
AF_INET: Final[int]
AF_INET6: Final[int]
AF_UNSPEC: Final[int]
SOCK_STREAM: Final[int]
SOCK_DGRAM: Final[int]
SOCK_RAW: Final[int]
SOCK_RDM: Final[int]
SOCK_SEQPACKET: Final[int]
if sys.platform == "linux":
# Availability: Linux >= 2.6.27
SOCK_CLOEXEC: Final[int]
SOCK_NONBLOCK: Final[int]
# --------------------
# Many constants of these forms, documented in the Unix documentation on
# sockets and/or the IP protocol, are also defined in the socket module.
# SO_*
# socket.SOMAXCONN
# MSG_*
# SOL_*
# SCM_*
# IPPROTO_*
# IPPORT_*
# INADDR_*
# IP_*
# IPV6_*
# EAI_*
# AI_*
# NI_*
# TCP_*
# --------------------
SO_ACCEPTCONN: Final[int]
SO_BROADCAST: Final[int]
SO_DEBUG: Final[int]
SO_DONTROUTE: Final[int]
SO_ERROR: Final[int]
SO_KEEPALIVE: Final[int]
SO_LINGER: Final[int]
SO_OOBINLINE: Final[int]
SO_RCVBUF: Final[int]
SO_RCVLOWAT: Final[int]
SO_RCVTIMEO: Final[int]
SO_REUSEADDR: Final[int]
SO_SNDBUF: Final[int]
SO_SNDLOWAT: Final[int]
SO_SNDTIMEO: Final[int]
SO_TYPE: Final[int]
if sys.platform != "linux":
SO_USELOOPBACK: Final[int]
if sys.platform == "win32":
SO_EXCLUSIVEADDRUSE: Final[int]
if sys.platform != "win32":
SO_REUSEPORT: Final[int]
if sys.platform != "darwin" or sys.version_info >= (3, 13):
SO_BINDTODEVICE: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
SO_DOMAIN: Final[int]
SO_MARK: Final[int]
SO_PASSCRED: Final[int]
SO_PASSSEC: Final[int]
SO_PEERCRED: Final[int]
SO_PEERSEC: Final[int]
SO_PRIORITY: Final[int]
SO_PROTOCOL: Final[int]
if sys.platform != "win32" and sys.platform != "darwin" and sys.platform != "linux":
SO_SETFIB: Final[int]
if sys.platform == "linux" and sys.version_info >= (3, 13):
SO_BINDTOIFINDEX: Final[int]
SOMAXCONN: Final[int]
MSG_CTRUNC: Final[int]
MSG_DONTROUTE: Final[int]
MSG_OOB: Final[int]
MSG_PEEK: Final[int]
MSG_TRUNC: Final[int]
MSG_WAITALL: Final[int]
if sys.platform != "win32":
MSG_DONTWAIT: Final[int]
MSG_EOR: Final[int]
MSG_NOSIGNAL: Final[int] # Sometimes this exists on darwin, sometimes not
if sys.platform != "darwin":
MSG_ERRQUEUE: Final[int]
if sys.platform == "win32":
MSG_BCAST: Final[int]
MSG_MCAST: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
MSG_CMSG_CLOEXEC: Final[int]
MSG_CONFIRM: Final[int]
MSG_FASTOPEN: Final[int]
MSG_MORE: Final[int]
if sys.platform != "win32" and sys.platform != "linux":
MSG_EOF: Final[int]
if sys.platform != "win32" and sys.platform != "linux" and sys.platform != "darwin":
MSG_NOTIFICATION: Final[int]
MSG_BTAG: Final[int] # Not FreeBSD either
MSG_ETAG: Final[int] # Not FreeBSD either
SOL_IP: Final[int]
SOL_SOCKET: Final[int]
SOL_TCP: Final[int]
SOL_UDP: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
# Defined in socket.h for Linux, but these aren't always present for
# some reason.
SOL_ATALK: Final[int]
SOL_AX25: Final[int]
SOL_HCI: Final[int]
SOL_IPX: Final[int]
SOL_NETROM: Final[int]
SOL_ROSE: Final[int]
if sys.platform != "win32":
SCM_RIGHTS: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
SCM_CREDENTIALS: Final[int]
if sys.platform != "win32" and sys.platform != "linux":
SCM_CREDS: Final[int]
IPPROTO_ICMP: Final[int]
IPPROTO_IP: Final[int]
IPPROTO_RAW: Final[int]
IPPROTO_TCP: Final[int]
IPPROTO_UDP: Final[int]
IPPROTO_AH: Final[int]
IPPROTO_DSTOPTS: Final[int]
IPPROTO_EGP: Final[int]
IPPROTO_ESP: Final[int]
IPPROTO_FRAGMENT: Final[int]
IPPROTO_HOPOPTS: Final[int]
IPPROTO_ICMPV6: Final[int]
IPPROTO_IDP: Final[int]
IPPROTO_IGMP: Final[int]
IPPROTO_IPV6: Final[int]
IPPROTO_NONE: Final[int]
IPPROTO_PIM: Final[int]
IPPROTO_PUP: Final[int]
IPPROTO_ROUTING: Final[int]
IPPROTO_SCTP: Final[int]
if sys.platform != "linux":
IPPROTO_GGP: Final[int]
IPPROTO_IPV4: Final[int]
IPPROTO_MAX: Final[int]
IPPROTO_ND: Final[int]
if sys.platform == "win32":
IPPROTO_CBT: Final[int]
IPPROTO_ICLFXBM: Final[int]
IPPROTO_IGP: Final[int]
IPPROTO_L2TP: Final[int]
IPPROTO_PGM: Final[int]
IPPROTO_RDP: Final[int]
IPPROTO_ST: Final[int]
if sys.platform != "win32":
IPPROTO_GRE: Final[int]
IPPROTO_IPIP: Final[int]
IPPROTO_RSVP: Final[int]
IPPROTO_TP: Final[int]
if sys.platform != "win32" and sys.platform != "linux":
IPPROTO_EON: Final[int]
IPPROTO_HELLO: Final[int]
IPPROTO_IPCOMP: Final[int]
IPPROTO_XTP: Final[int]
if sys.platform != "win32" and sys.platform != "darwin" and sys.platform != "linux":
IPPROTO_BIP: Final[int] # Not FreeBSD either
IPPROTO_MOBILE: Final[int] # Not FreeBSD either
IPPROTO_VRRP: Final[int] # Not FreeBSD either
if sys.platform == "linux":
# Availability: Linux >= 2.6.20, FreeBSD >= 10.1
IPPROTO_UDPLITE: Final[int]
if sys.version_info >= (3, 10) and sys.platform == "linux":
IPPROTO_MPTCP: Final[int]
IPPORT_RESERVED: Final[int]
IPPORT_USERRESERVED: Final[int]
INADDR_ALLHOSTS_GROUP: Final[int]
INADDR_ANY: Final[int]
INADDR_BROADCAST: Final[int]
INADDR_LOOPBACK: Final[int]
INADDR_MAX_LOCAL_GROUP: Final[int]
INADDR_NONE: Final[int]
INADDR_UNSPEC_GROUP: Final[int]
IP_ADD_MEMBERSHIP: Final[int]
IP_DROP_MEMBERSHIP: Final[int]
IP_HDRINCL: Final[int]
IP_MULTICAST_IF: Final[int]
IP_MULTICAST_LOOP: Final[int]
IP_MULTICAST_TTL: Final[int]
IP_OPTIONS: Final[int]
if sys.platform != "linux":
IP_RECVDSTADDR: Final[int]
if sys.version_info >= (3, 10):
IP_RECVTOS: Final[int]
IP_TOS: Final[int]
IP_TTL: Final[int]
if sys.platform != "win32":
IP_DEFAULT_MULTICAST_LOOP: Final[int]
IP_DEFAULT_MULTICAST_TTL: Final[int]
IP_MAX_MEMBERSHIPS: Final[int]
IP_RECVOPTS: Final[int]
IP_RECVRETOPTS: Final[int]
IP_RETOPTS: Final[int]
if sys.version_info >= (3, 13) and sys.platform == "linux":
CAN_RAW_ERR_FILTER: Final[int]
if sys.version_info >= (3, 14):
IP_RECVTTL: Final[int]
if sys.platform == "win32" or sys.platform == "linux":
IPV6_RECVERR: Final[int]
IP_RECVERR: Final[int]
SO_ORIGINAL_DST: Final[int]
if sys.platform == "win32":
SOL_RFCOMM: Final[int]
SO_BTH_ENCRYPT: Final[int]
SO_BTH_MTU: Final[int]
SO_BTH_MTU_MAX: Final[int]
SO_BTH_MTU_MIN: Final[int]
TCP_QUICKACK: Final[int]
if sys.platform == "linux":
IP_FREEBIND: Final[int]
IP_RECVORIGDSTADDR: Final[int]
VMADDR_CID_LOCAL: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
IP_TRANSPARENT: Final[int]
if sys.platform != "win32" and sys.platform != "darwin" and sys.version_info >= (3, 11):
IP_BIND_ADDRESS_NO_PORT: Final[int]
if sys.version_info >= (3, 12):
IP_ADD_SOURCE_MEMBERSHIP: Final[int]
IP_BLOCK_SOURCE: Final[int]
IP_DROP_SOURCE_MEMBERSHIP: Final[int]
IP_PKTINFO: Final[int]
IP_UNBLOCK_SOURCE: Final[int]
IPV6_CHECKSUM: Final[int]
IPV6_JOIN_GROUP: Final[int]
IPV6_LEAVE_GROUP: Final[int]
IPV6_MULTICAST_HOPS: Final[int]
IPV6_MULTICAST_IF: Final[int]
IPV6_MULTICAST_LOOP: Final[int]
IPV6_RECVTCLASS: Final[int]
IPV6_TCLASS: Final[int]
IPV6_UNICAST_HOPS: Final[int]
IPV6_V6ONLY: Final[int]
IPV6_DONTFRAG: Final[int]
IPV6_HOPLIMIT: Final[int]
IPV6_HOPOPTS: Final[int]
IPV6_PKTINFO: Final[int]
IPV6_RECVRTHDR: Final[int]
IPV6_RTHDR: Final[int]
if sys.platform != "win32":
IPV6_RTHDR_TYPE_0: Final[int]
IPV6_DSTOPTS: Final[int]
IPV6_NEXTHOP: Final[int]
IPV6_PATHMTU: Final[int]
IPV6_RECVDSTOPTS: Final[int]
IPV6_RECVHOPLIMIT: Final[int]
IPV6_RECVHOPOPTS: Final[int]
IPV6_RECVPATHMTU: Final[int]
IPV6_RECVPKTINFO: Final[int]
IPV6_RTHDRDSTOPTS: Final[int]
if sys.platform != "win32" and sys.platform != "linux":
IPV6_USE_MIN_MTU: Final[int]
EAI_AGAIN: Final[int]
EAI_BADFLAGS: Final[int]
EAI_FAIL: Final[int]
EAI_FAMILY: Final[int]
EAI_MEMORY: Final[int]
EAI_NODATA: Final[int]
EAI_NONAME: Final[int]
EAI_SERVICE: Final[int]
EAI_SOCKTYPE: Final[int]
if sys.platform != "win32":
EAI_ADDRFAMILY: Final[int]
EAI_OVERFLOW: Final[int]
EAI_SYSTEM: Final[int]
if sys.platform != "win32" and sys.platform != "linux":
EAI_BADHINTS: Final[int]
EAI_MAX: Final[int]
EAI_PROTOCOL: Final[int]
AI_ADDRCONFIG: Final[int]
AI_ALL: Final[int]
AI_CANONNAME: Final[int]
AI_NUMERICHOST: Final[int]
AI_NUMERICSERV: Final[int]
AI_PASSIVE: Final[int]
AI_V4MAPPED: Final[int]
if sys.platform != "win32" and sys.platform != "linux":
AI_DEFAULT: Final[int]
AI_MASK: Final[int]
AI_V4MAPPED_CFG: Final[int]
NI_DGRAM: Final[int]
NI_MAXHOST: Final[int]
NI_MAXSERV: Final[int]
NI_NAMEREQD: Final[int]
NI_NOFQDN: Final[int]
NI_NUMERICHOST: Final[int]
NI_NUMERICSERV: Final[int]
if sys.platform == "linux" and sys.version_info >= (3, 13):
NI_IDN: Final[int]
TCP_FASTOPEN: Final[int]
TCP_KEEPCNT: Final[int]
TCP_KEEPINTVL: Final[int]
TCP_MAXSEG: Final[int]
TCP_NODELAY: Final[int]
if sys.platform != "win32":
TCP_NOTSENT_LOWAT: Final[int]
if sys.platform != "darwin":
TCP_KEEPIDLE: Final[int]
if sys.version_info >= (3, 10) and sys.platform == "darwin":
TCP_KEEPALIVE: Final[int]
if sys.version_info >= (3, 11) and sys.platform == "darwin":
TCP_CONNECTION_INFO: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
TCP_CONGESTION: Final[int]
TCP_CORK: Final[int]
TCP_DEFER_ACCEPT: Final[int]
TCP_INFO: Final[int]
TCP_LINGER2: Final[int]
TCP_QUICKACK: Final[int]
TCP_SYNCNT: Final[int]
TCP_USER_TIMEOUT: Final[int]
TCP_WINDOW_CLAMP: Final[int]
if sys.platform == "linux" and sys.version_info >= (3, 12):
TCP_CC_INFO: Final[int]
TCP_FASTOPEN_CONNECT: Final[int]
TCP_FASTOPEN_KEY: Final[int]
TCP_FASTOPEN_NO_COOKIE: Final[int]
TCP_INQ: Final[int]
TCP_MD5SIG: Final[int]
TCP_MD5SIG_EXT: Final[int]
TCP_QUEUE_SEQ: Final[int]
TCP_REPAIR: Final[int]
TCP_REPAIR_OPTIONS: Final[int]
TCP_REPAIR_QUEUE: Final[int]
TCP_REPAIR_WINDOW: Final[int]
TCP_SAVED_SYN: Final[int]
TCP_SAVE_SYN: Final[int]
TCP_THIN_DUPACK: Final[int]
TCP_THIN_LINEAR_TIMEOUTS: Final[int]
TCP_TIMESTAMP: Final[int]
TCP_TX_DELAY: Final[int]
TCP_ULP: Final[int]
TCP_ZEROCOPY_RECEIVE: Final[int]
# --------------------
# Specifically documented constants
# --------------------
if sys.platform == "linux":
# Availability: Linux >= 2.6.25, NetBSD >= 8
AF_CAN: Final[int]
PF_CAN: Final[int]
SOL_CAN_BASE: Final[int]
SOL_CAN_RAW: Final[int]
CAN_EFF_FLAG: Final[int]
CAN_EFF_MASK: Final[int]
CAN_ERR_FLAG: Final[int]
CAN_ERR_MASK: Final[int]
CAN_RAW: Final[int]
CAN_RAW_FILTER: Final[int]
CAN_RAW_LOOPBACK: Final[int]
CAN_RAW_RECV_OWN_MSGS: Final[int]
CAN_RTR_FLAG: Final[int]
CAN_SFF_MASK: Final[int]
if sys.version_info < (3, 11):
CAN_RAW_ERR_FILTER: Final[int]
if sys.platform == "linux":
# Availability: Linux >= 2.6.25
CAN_BCM: Final[int]
CAN_BCM_TX_SETUP: Final[int]
CAN_BCM_TX_DELETE: Final[int]
CAN_BCM_TX_READ: Final[int]
CAN_BCM_TX_SEND: Final[int]
CAN_BCM_RX_SETUP: Final[int]
CAN_BCM_RX_DELETE: Final[int]
CAN_BCM_RX_READ: Final[int]
CAN_BCM_TX_STATUS: Final[int]
CAN_BCM_TX_EXPIRED: Final[int]
CAN_BCM_RX_STATUS: Final[int]
CAN_BCM_RX_TIMEOUT: Final[int]
CAN_BCM_RX_CHANGED: Final[int]
CAN_BCM_SETTIMER: Final[int]
CAN_BCM_STARTTIMER: Final[int]
CAN_BCM_TX_COUNTEVT: Final[int]
CAN_BCM_TX_ANNOUNCE: Final[int]
CAN_BCM_TX_CP_CAN_ID: Final[int]
CAN_BCM_RX_FILTER_ID: Final[int]
CAN_BCM_RX_CHECK_DLC: Final[int]
CAN_BCM_RX_NO_AUTOTIMER: Final[int]
CAN_BCM_RX_ANNOUNCE_RESUME: Final[int]
CAN_BCM_TX_RESET_MULTI_IDX: Final[int]
CAN_BCM_RX_RTR_FRAME: Final[int]
CAN_BCM_CAN_FD_FRAME: Final[int]
if sys.platform == "linux":
# Availability: Linux >= 3.6
CAN_RAW_FD_FRAMES: Final[int]
# Availability: Linux >= 4.1
CAN_RAW_JOIN_FILTERS: Final[int]
# Availability: Linux >= 2.6.25
CAN_ISOTP: Final[int]
# Availability: Linux >= 5.4
CAN_J1939: Final[int]
J1939_MAX_UNICAST_ADDR: Final[int]
J1939_IDLE_ADDR: Final[int]
J1939_NO_ADDR: Final[int]
J1939_NO_NAME: Final[int]
J1939_PGN_REQUEST: Final[int]
J1939_PGN_ADDRESS_CLAIMED: Final[int]
J1939_PGN_ADDRESS_COMMANDED: Final[int]
J1939_PGN_PDU1_MAX: Final[int]
J1939_PGN_MAX: Final[int]
J1939_NO_PGN: Final[int]
SO_J1939_FILTER: Final[int]
SO_J1939_PROMISC: Final[int]
SO_J1939_SEND_PRIO: Final[int]
SO_J1939_ERRQUEUE: Final[int]
SCM_J1939_DEST_ADDR: Final[int]
SCM_J1939_DEST_NAME: Final[int]
SCM_J1939_PRIO: Final[int]
SCM_J1939_ERRQUEUE: Final[int]
J1939_NLA_PAD: Final[int]
J1939_NLA_BYTES_ACKED: Final[int]
J1939_EE_INFO_NONE: Final[int]
J1939_EE_INFO_TX_ABORT: Final[int]
J1939_FILTER_MAX: Final[int]
if sys.version_info >= (3, 12) and sys.platform != "linux" and sys.platform != "win32" and sys.platform != "darwin":
# Availability: FreeBSD >= 14.0
AF_DIVERT: Final[int]
PF_DIVERT: Final[int]
if sys.platform == "linux":
# Availability: Linux >= 2.2
AF_PACKET: Final[int]
PF_PACKET: Final[int]
PACKET_BROADCAST: Final[int]
PACKET_FASTROUTE: Final[int]
PACKET_HOST: Final[int]
PACKET_LOOPBACK: Final[int]
PACKET_MULTICAST: Final[int]
PACKET_OTHERHOST: Final[int]
PACKET_OUTGOING: Final[int]
if sys.version_info >= (3, 12) and sys.platform == "linux":
ETH_P_ALL: Final[int]
if sys.platform == "linux":
# Availability: Linux >= 2.6.30
AF_RDS: Final[int]
PF_RDS: Final[int]
SOL_RDS: Final[int]
# These are present in include/linux/rds.h but don't always show up
# here.
RDS_CANCEL_SENT_TO: Final[int]
RDS_CMSG_RDMA_ARGS: Final[int]
RDS_CMSG_RDMA_DEST: Final[int]
RDS_CMSG_RDMA_MAP: Final[int]
RDS_CMSG_RDMA_STATUS: Final[int]
RDS_CONG_MONITOR: Final[int]
RDS_FREE_MR: Final[int]
RDS_GET_MR: Final[int]
RDS_GET_MR_FOR_DEST: Final[int]
RDS_RDMA_DONTWAIT: Final[int]
RDS_RDMA_FENCE: Final[int]
RDS_RDMA_INVALIDATE: Final[int]
RDS_RDMA_NOTIFY_ME: Final[int]
RDS_RDMA_READWRITE: Final[int]
RDS_RDMA_SILENT: Final[int]
RDS_RDMA_USE_ONCE: Final[int]
RDS_RECVERR: Final[int]
# This is supported by CPython but doesn't seem to be a real thing.
# The closest existing constant in rds.h is RDS_CMSG_CONG_UPDATE
# RDS_CMSG_RDMA_UPDATE: Final[int]
if sys.platform == "win32":
SIO_RCVALL: Final[int]
SIO_KEEPALIVE_VALS: Final[int]
SIO_LOOPBACK_FAST_PATH: Final[int]
RCVALL_MAX: Final[int]
RCVALL_OFF: Final[int]
RCVALL_ON: Final[int]
RCVALL_SOCKETLEVELONLY: Final[int]
if sys.platform == "linux":
AF_TIPC: Final[int]
SOL_TIPC: Final[int]
TIPC_ADDR_ID: Final[int]
TIPC_ADDR_NAME: Final[int]
TIPC_ADDR_NAMESEQ: Final[int]
TIPC_CFG_SRV: Final[int]
TIPC_CLUSTER_SCOPE: Final[int]
TIPC_CONN_TIMEOUT: Final[int]
TIPC_CRITICAL_IMPORTANCE: Final[int]
TIPC_DEST_DROPPABLE: Final[int]
TIPC_HIGH_IMPORTANCE: Final[int]
TIPC_IMPORTANCE: Final[int]
TIPC_LOW_IMPORTANCE: Final[int]
TIPC_MEDIUM_IMPORTANCE: Final[int]
TIPC_NODE_SCOPE: Final[int]
TIPC_PUBLISHED: Final[int]
TIPC_SRC_DROPPABLE: Final[int]
TIPC_SUBSCR_TIMEOUT: Final[int]
TIPC_SUB_CANCEL: Final[int]
TIPC_SUB_PORTS: Final[int]
TIPC_SUB_SERVICE: Final[int]
TIPC_TOP_SRV: Final[int]
TIPC_WAIT_FOREVER: Final[int]
TIPC_WITHDRAWN: Final[int]
TIPC_ZONE_SCOPE: Final[int]
if sys.platform == "linux":
# Availability: Linux >= 2.6.38
AF_ALG: Final[int]
SOL_ALG: Final[int]
ALG_OP_DECRYPT: Final[int]
ALG_OP_ENCRYPT: Final[int]
ALG_OP_SIGN: Final[int]
ALG_OP_VERIFY: Final[int]
ALG_SET_AEAD_ASSOCLEN: Final[int]
ALG_SET_AEAD_AUTHSIZE: Final[int]
ALG_SET_IV: Final[int]
ALG_SET_KEY: Final[int]
ALG_SET_OP: Final[int]
ALG_SET_PUBKEY: Final[int]
if sys.platform == "linux":
# Availability: Linux >= 4.8 (or maybe 3.9, CPython docs are confusing)
AF_VSOCK: Final[int]
IOCTL_VM_SOCKETS_GET_LOCAL_CID: Final = 0x7B9
VMADDR_CID_ANY: Final = 0xFFFFFFFF
VMADDR_CID_HOST: Final = 2
VMADDR_PORT_ANY: Final = 0xFFFFFFFF
SO_VM_SOCKETS_BUFFER_MAX_SIZE: Final = 2
SO_VM_SOCKETS_BUFFER_SIZE: Final = 0
SO_VM_SOCKETS_BUFFER_MIN_SIZE: Final = 1
VM_SOCKETS_INVALID_VERSION: Final = 0xFFFFFFFF # undocumented
# Documented as only available on BSD, macOS, but empirically sometimes
# available on Windows
if sys.platform != "linux":
AF_LINK: Final[int]
has_ipv6: bool
if sys.platform != "darwin":
BDADDR_ANY: Final = "00:00:00:00:00:00"
BDADDR_LOCAL: Final = "00:00:00:FF:FF:FF"
if sys.platform != "win32" and sys.platform != "darwin" and sys.platform != "linux":
HCI_FILTER: Final[int] # not in NetBSD or DragonFlyBSD
HCI_TIME_STAMP: Final[int] # not in FreeBSD, NetBSD, or DragonFlyBSD
HCI_DATA_DIR: Final[int] # not in FreeBSD, NetBSD, or DragonFlyBSD
if sys.platform == "linux":
AF_QIPCRTR: Final[int] # Availability: Linux >= 4.7
if sys.version_info >= (3, 11) and sys.platform != "linux" and sys.platform != "win32" and sys.platform != "darwin":
# FreeBSD
SCM_CREDS2: Final[int]
LOCAL_CREDS: Final[int]
LOCAL_CREDS_PERSISTENT: Final[int]
if sys.version_info >= (3, 11) and sys.platform == "linux":
SO_INCOMING_CPU: Final[int] # Availability: Linux >= 3.9
if sys.version_info >= (3, 12) and sys.platform == "win32":
# Availability: Windows
AF_HYPERV: Final[int]
HV_PROTOCOL_RAW: Final[int]
HVSOCKET_CONNECT_TIMEOUT: Final[int]
HVSOCKET_CONNECT_TIMEOUT_MAX: Final[int]
HVSOCKET_CONNECTED_SUSPEND: Final[int]
HVSOCKET_ADDRESS_FLAG_PASSTHRU: Final[int]
HV_GUID_ZERO: Final = "00000000-0000-0000-0000-000000000000"
HV_GUID_WILDCARD: Final = "00000000-0000-0000-0000-000000000000"
HV_GUID_BROADCAST: Final = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"
HV_GUID_CHILDREN: Final = "90DB8B89-0D35-4F79-8CE9-49EA0AC8B7CD"
HV_GUID_LOOPBACK: Final = "E0E16197-DD56-4A10-9195-5EE7A155A838"
HV_GUID_PARENT: Final = "A42E7CDA-D03F-480C-9CC2-A4DE20ABB878"
if sys.version_info >= (3, 12):
if sys.platform != "win32":
# Availability: Linux, FreeBSD, macOS
ETHERTYPE_ARP: Final[int]
ETHERTYPE_IP: Final[int]
ETHERTYPE_IPV6: Final[int]
ETHERTYPE_VLAN: Final[int]
# --------------------
# Semi-documented constants
# These are alluded to under the "Socket families" section in the docs
# https://docs.python.org/3/library/socket.html#socket-families
# --------------------
if sys.platform == "linux":
# Netlink is defined by Linux
AF_NETLINK: Final[int]
NETLINK_CRYPTO: Final[int]
NETLINK_DNRTMSG: Final[int]
NETLINK_FIREWALL: Final[int]
NETLINK_IP6_FW: Final[int]
NETLINK_NFLOG: Final[int]
NETLINK_ROUTE: Final[int]
NETLINK_USERSOCK: Final[int]
NETLINK_XFRM: Final[int]
# Technically still supported by CPython
# NETLINK_ARPD: Final[int] # linux 2.0 to 2.6.12 (EOL August 2005)
# NETLINK_ROUTE6: Final[int] # linux 2.2 to 2.6.12 (EOL August 2005)
# NETLINK_SKIP: Final[int] # linux 2.0 to 2.6.12 (EOL August 2005)
# NETLINK_TAPBASE: Final[int] # linux 2.2 to 2.6.12 (EOL August 2005)
# NETLINK_TCPDIAG: Final[int] # linux 2.6.0 to 2.6.13 (EOL December 2005)
# NETLINK_W1: Final[int] # linux 2.6.13 to 2.6.17 (EOL October 2006)
if sys.platform == "darwin":
PF_SYSTEM: Final[int]
SYSPROTO_CONTROL: Final[int]
if sys.platform != "darwin":
AF_BLUETOOTH: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
# Linux and some BSD support is explicit in the docs
# Windows and macOS do not support in practice
BTPROTO_HCI: Final[int]
BTPROTO_L2CAP: Final[int]
BTPROTO_SCO: Final[int] # not in FreeBSD
if sys.platform != "darwin":
BTPROTO_RFCOMM: Final[int]
if sys.platform == "linux":
UDPLITE_RECV_CSCOV: Final[int]
UDPLITE_SEND_CSCOV: Final[int]
# --------------------
# Documented under socket.shutdown
# --------------------
SHUT_RD: Final[int]
SHUT_RDWR: Final[int]
SHUT_WR: Final[int]
# --------------------
# Undocumented constants
# --------------------
# Undocumented address families
AF_APPLETALK: Final[int]
AF_DECnet: Final[int]
AF_IPX: Final[int]
AF_SNA: Final[int]
if sys.platform != "win32":
AF_ROUTE: Final[int]
if sys.platform == "darwin":
AF_SYSTEM: Final[int]
if sys.platform != "darwin":
AF_IRDA: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
AF_ASH: Final[int]
AF_ATMPVC: Final[int]
AF_ATMSVC: Final[int]
AF_AX25: Final[int]
AF_BRIDGE: Final[int]
AF_ECONET: Final[int]
AF_KEY: Final[int]
AF_LLC: Final[int]
AF_NETBEUI: Final[int]
AF_NETROM: Final[int]
AF_PPPOX: Final[int]
AF_ROSE: Final[int]
AF_SECURITY: Final[int]
AF_WANPIPE: Final[int]
AF_X25: Final[int]
# Miscellaneous undocumented
if sys.platform != "win32" and sys.platform != "linux":
LOCAL_PEERCRED: Final[int]
if sys.platform != "win32" and sys.platform != "darwin":
# Defined in linux socket.h, but this isn't always present for
# some reason.
IPX_TYPE: Final[int]
# ===== Classes =====
@disjoint_base
class socket:
@property
def family(self) -> int: ...
@property
def type(self) -> int: ...
@property
def proto(self) -> int: ...
# F811: "Redefinition of unused `timeout`"
@property
def timeout(self) -> float | None: ...
if sys.platform == "win32":
def __init__(
self, family: int = ..., type: int = ..., proto: int = ..., fileno: SupportsIndex | bytes | None = None
) -> None: ...
else:
def __init__(self, family: int = ..., type: int = ..., proto: int = ..., fileno: SupportsIndex | None = None) -> None: ...
def bind(self, address: _Address, /) -> None: ...
def close(self) -> None: ...
def connect(self, address: _Address, /) -> None: ...
def connect_ex(self, address: _Address, /) -> int: ...
def detach(self) -> int: ...
def fileno(self) -> int: ...
def getpeername(self) -> _RetAddress: ...
def getsockname(self) -> _RetAddress: ...
@overload
def getsockopt(self, level: int, optname: int, /) -> int: ...
@overload
def getsockopt(self, level: int, optname: int, buflen: int, /) -> bytes: ...
def getblocking(self) -> bool: ...
def gettimeout(self) -> float | None: ...
if sys.platform == "win32":
def ioctl(self, control: int, option: int | tuple[int, int, int] | bool, /) -> None: ...
def listen(self, backlog: int = ..., /) -> None: ...
def recv(self, bufsize: int, flags: int = 0, /) -> bytes: ...
def recvfrom(self, bufsize: int, flags: int = 0, /) -> tuple[bytes, _RetAddress]: ...
if sys.platform != "win32":
def recvmsg(self, bufsize: int, ancbufsize: int = 0, flags: int = 0, /) -> tuple[bytes, list[_CMSG], int, Any]: ...
def recvmsg_into(
self, buffers: Iterable[WriteableBuffer], ancbufsize: int = 0, flags: int = 0, /
) -> tuple[int, list[_CMSG], int, Any]: ...
def recvfrom_into(self, buffer: WriteableBuffer, nbytes: int = 0, flags: int = 0) -> tuple[int, _RetAddress]: ...
def recv_into(self, buffer: WriteableBuffer, nbytes: int = 0, flags: int = 0) -> int: ...
def send(self, data: ReadableBuffer, flags: int = 0, /) -> int: ...
def sendall(self, data: ReadableBuffer, flags: int = 0, /) -> None: ...
@overload
def sendto(self, data: ReadableBuffer, address: _Address, /) -> int: ...
@overload
def sendto(self, data: ReadableBuffer, flags: int, address: _Address, /) -> int: ...
if sys.platform != "win32":
def sendmsg(
self,
buffers: Iterable[ReadableBuffer],
ancdata: Iterable[_CMSGArg] = ...,
flags: int = 0,
address: _Address | None = None,
/,
) -> int: ...
if sys.platform == "linux":
def sendmsg_afalg(
self, msg: Iterable[ReadableBuffer] = ..., *, op: int, iv: Any = ..., assoclen: int = ..., flags: int = 0
) -> int: ...
def setblocking(self, flag: bool, /) -> None: ...
def settimeout(self, value: float | None, /) -> None: ...
@overload
def setsockopt(self, level: int, optname: int, value: int | ReadableBuffer, /) -> None: ...
@overload
def setsockopt(self, level: int, optname: int, value: None, optlen: int, /) -> None: ...
if sys.platform == "win32":
def share(self, process_id: int, /) -> bytes: ...
def shutdown(self, how: int, /) -> None: ...
SocketType = socket
# ===== Functions =====
def close(fd: SupportsIndex, /) -> None: ...
def dup(fd: SupportsIndex, /) -> int: ...
# the 5th tuple item is an address
def getaddrinfo(
host: bytes | str | None, port: bytes | str | int | None, family: int = ..., type: int = 0, proto: int = 0, flags: int = 0
) -> list[tuple[int, int, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]]: ...
def gethostbyname(hostname: str, /) -> str: ...
def gethostbyname_ex(hostname: str, /) -> tuple[str, list[str], list[str]]: ...
def gethostname() -> str: ...
def gethostbyaddr(ip_address: str, /) -> tuple[str, list[str], list[str]]: ...
def getnameinfo(sockaddr: tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes], flags: int, /) -> tuple[str, str]: ...
def getprotobyname(protocolname: str, /) -> int: ...
def getservbyname(servicename: str, protocolname: str = ..., /) -> int: ...
def getservbyport(port: int, protocolname: str = ..., /) -> str: ...
def ntohl(x: int, /) -> int: ... # param & ret val are 32-bit ints
def ntohs(x: int, /) -> int: ... # param & ret val are 16-bit ints
def htonl(x: int, /) -> int: ... # param & ret val are 32-bit ints
def htons(x: int, /) -> int: ... # param & ret val are 16-bit ints
def inet_aton(ip_addr: str, /) -> bytes: ... # ret val 4 bytes in length
def inet_ntoa(packed_ip: ReadableBuffer, /) -> str: ...
def inet_pton(address_family: int, ip_string: str, /) -> bytes: ...
def inet_ntop(address_family: int, packed_ip: ReadableBuffer, /) -> str: ...
def getdefaulttimeout() -> float | None: ...
# F811: "Redefinition of unused `timeout`"
def setdefaulttimeout(timeout: float | None, /) -> None: ...
if sys.platform != "win32":
def sethostname(name: str, /) -> None: ...
def CMSG_LEN(length: int, /) -> int: ...
def CMSG_SPACE(length: int, /) -> int: ...
def socketpair(family: int = ..., type: int = ..., proto: int = 0, /) -> tuple[socket, socket]: ...
def if_nameindex() -> list[tuple[int, str]]: ...
def if_nametoindex(oname: str, /) -> int: ...
if sys.version_info >= (3, 14):
def if_indextoname(if_index: int, /) -> str: ...
else:
def if_indextoname(index: int, /) -> str: ...
CAPI: CapsuleType