diff --git a/stdlib/2and3/socket.pyi b/stdlib/2and3/socket.pyi index 3a5a9de22..ec8534166 100644 --- a/stdlib/2and3/socket.pyi +++ b/stdlib/2and3/socket.pyi @@ -1,43 +1,73 @@ -# Stubs for socket -# Ron Murawski +"""Stub for the socket module -# based on: http://docs.python.org/3.2/library/socket.html -# see: http://hg.python.org/cpython/file/3d0686d90f55/Lib/socket.py -# see: http://nullege.com/codes/search/socket -# adapted for Python 2.7 by Michal Pokorny +This file is organized to mirror the module's documentation, with a very small +number of exceptions. + +To avoid requiring tests on all platforms, platform checks are included only +where the documentation notes platform availability (as opposed to following +actual availability), with one or two exceptions. + +Module documentation: https://docs.python.org/3/library/socket.html +CPython module source: https://github.com/python/cpython/blob/master/Lib/socket.py +CPython C source: https://github.com/python/cpython/blob/master/Modules/socketmodule.c +""" +# Authorship from original mypy stubs (not in typeshed git history): +# Ron Murawski +# adapted for Python 2.7 by Michal Pokorny import sys -from typing import Any, Iterable, Tuple, List, Optional, Union, overload, TypeVar, Text +from typing import Any, BinaryIO, Iterable, List, Optional, Text, TextIO, Tuple, TypeVar, Union, overload -_WriteBuffer = Union[bytearray, memoryview] +if sys.version_info >= (3, 8): + from typing import Literal +else: + from typing_extensions import Literal -# ----- variables and constants ----- +# ----- Constants ----- +# Some socket families are listed in the "Socket families" section of the docs, +# but not the "Constants" section. These are listed at the end of the list of +# constants. +# +# Besides those and the first few constants listed, the constants are listed in +# documentation order. + +# Constants defined by Python (i.e. not OS constants re-exported from C) +has_ipv6: bool +SocketType: Any +if sys.version_info >= (3,): + SocketIO: Any + +# Re-exported errno +EAGAIN: int +EBADF: int +EINTR: int +EWOULDBLOCK: int + +# Constants re-exported from C + +# Per socketmodule.c, only these three families are portable AF_UNIX: AddressFamily AF_INET: AddressFamily AF_INET6: AddressFamily + SOCK_STREAM: SocketKind SOCK_DGRAM: SocketKind SOCK_RAW: SocketKind SOCK_RDM: SocketKind SOCK_SEQPACKET: SocketKind -SOCK_CLOEXEC: SocketKind -SOCK_NONBLOCK: SocketKind -SOMAXCONN: int -has_ipv6: bool -_GLOBAL_DEFAULT_TIMEOUT: Any -SocketType: Any -SocketIO: Any -# These are flags that may exist on Python 3.6. Many don't exist on all platforms. +if sys.platform == 'linux' and sys.version_info >= (3,): + SOCK_CLOEXEC: SocketKind + SOCK_NONBLOCK: SocketKind + +# Address families not mentioned in the docs AF_AAL5: AddressFamily AF_APPLETALK: AddressFamily AF_ASH: AddressFamily AF_ATMPVC: AddressFamily AF_ATMSVC: AddressFamily AF_AX25: AddressFamily -AF_BLUETOOTH: AddressFamily AF_BRIDGE: AddressFamily -AF_CAN: AddressFamily AF_DECnet: AddressFamily AF_ECONET: AddressFamily AF_IPX: AddressFamily @@ -45,20 +75,19 @@ AF_IRDA: AddressFamily AF_KEY: AddressFamily AF_LLC: AddressFamily AF_NETBEUI: AddressFamily -AF_NETLINK: AddressFamily AF_NETROM: AddressFamily -AF_PACKET: AddressFamily AF_PPPOX: AddressFamily -AF_RDS: AddressFamily AF_ROSE: AddressFamily AF_ROUTE: AddressFamily AF_SECURITY: AddressFamily AF_SNA: AddressFamily AF_SYSTEM: AddressFamily -AF_TIPC: AddressFamily AF_UNSPEC: AddressFamily AF_WANPIPE: AddressFamily AF_X25: AddressFamily + +# The "many constants" referenced by the docs +SOMAXCONN: int AI_ADDRCONFIG: AddressInfo AI_ALL: AddressInfo AI_CANONNAME: AddressInfo @@ -69,26 +98,7 @@ AI_NUMERICSERV: AddressInfo AI_PASSIVE: AddressInfo AI_V4MAPPED: AddressInfo AI_V4MAPPED_CFG: AddressInfo -BDADDR_ANY: str -BDADDR_LOCAL: str -BTPROTO_HCI: int -BTPROTO_L2CAP: int -BTPROTO_RFCOMM: int -BTPROTO_SCO: int -CAN_EFF_FLAG: int -CAN_EFF_MASK: int -CAN_ERR_FLAG: int -CAN_ERR_MASK: int -CAN_RAW: int -CAN_RAW_ERR_FILTER: int -CAN_RAW_FILTER: int -CAN_RAW_LOOPBACK: int -CAN_RAW_RECV_OWN_MSGS: int -CAN_RTR_FLAG: int -CAN_SFF_MASK: int -CAPI: int -EAGAIN: int -EAI_ADDRFAMILY: int +EAIEAI_ADDRFAMILY: int EAI_AGAIN: int EAI_BADFLAGS: int EAI_BADHINTS: int @@ -103,12 +113,6 @@ EAI_PROTOCOL: int EAI_SERVICE: int EAI_SOCKTYPE: int EAI_SYSTEM: int -EBADF: int -EINTR: int -EWOULDBLOCK: int -HCI_DATA_DIR: int -HCI_FILTER: int -HCI_TIME_STAMP: int INADDR_ALLHOSTS_GROUP: int INADDR_ANY: int INADDR_BROADCAST: int @@ -174,12 +178,13 @@ IPV6_RECVPKTINFO: int IPV6_RECVRTHDR: int IPV6_RECVTCLASS: int IPV6_RTHDR: int -IPV6_RTHDR_TYPE_0: int IPV6_RTHDRDSTOPTS: int +IPV6_RTHDR_TYPE_0: int IPV6_TCLASS: int IPV6_UNICAST_HOPS: int IPV6_USE_MIN_MTU: int IPV6_V6ONLY: int +IPX_TYPE: int IP_ADD_MEMBERSHIP: int IP_DEFAULT_MULTICAST_LOOP: int IP_DEFAULT_MULTICAST_TTL: int @@ -197,7 +202,6 @@ IP_RETOPTS: int IP_TOS: int IP_TRANSPARENT: int IP_TTL: int -IPX_TYPE: int LOCAL_PEERCRED: int MSG_BCAST: MsgFlag MSG_BTAG: MsgFlag @@ -219,20 +223,6 @@ MSG_OOB: MsgFlag MSG_PEEK: MsgFlag MSG_TRUNC: MsgFlag MSG_WAITALL: MsgFlag -NETLINK_ARPD: int -NETLINK_CRYPTO: int -NETLINK_DNRTMSG: int -NETLINK_FIREWALL: int -NETLINK_IP6_FW: int -NETLINK_NFLOG: int -NETLINK_ROUTE6: int -NETLINK_ROUTE: int -NETLINK_SKIP: int -NETLINK_TAPBASE: int -NETLINK_TCPDIAG: int -NETLINK_USERSOCK: int -NETLINK_W1: int -NETLINK_XFRM: int NI_DGRAM: int NI_MAXHOST: int NI_MAXSERV: int @@ -240,17 +230,6 @@ NI_NAMEREQD: int NI_NOFQDN: int NI_NUMERICHOST: int NI_NUMERICSERV: int -PACKET_BROADCAST: int -PACKET_FASTROUTE: int -PACKET_HOST: int -PACKET_LOOPBACK: int -PACKET_MULTICAST: int -PACKET_OTHERHOST: int -PACKET_OUTGOING: int -PF_CAN: int -PF_PACKET: int -PF_RDS: int -PF_SYSTEM: int SCM_CREDENTIALS: int SCM_CREDS: int SCM_RIGHTS: int @@ -259,17 +238,13 @@ SHUT_RDWR: int SHUT_WR: int SOL_ATALK: int SOL_AX25: int -SOL_CAN_BASE: int -SOL_CAN_RAW: int SOL_HCI: int SOL_IP: int SOL_IPX: int SOL_NETROM: int -SOL_RDS: int SOL_ROSE: int SOL_SOCKET: int SOL_TCP: int -SOL_TIPC: int SOL_UDP: int SO_ACCEPTCONN: int SO_BINDTODEVICE: int @@ -296,7 +271,6 @@ SO_SNDLOWAT: int SO_SNDTIMEO: int SO_TYPE: int SO_USELOOPBACK: int -SYSPROTO_CONTROL: int TCP_CORK: int TCP_DEFER_ACCEPT: int TCP_FASTOPEN: int @@ -307,35 +281,65 @@ TCP_KEEPINTVL: int TCP_LINGER2: int TCP_MAXSEG: int TCP_NODELAY: int -TCP_NOTSENT_LOWAT: int TCP_QUICKACK: int TCP_SYNCNT: int TCP_WINDOW_CLAMP: int -TIPC_ADDR_ID: int -TIPC_ADDR_NAME: int -TIPC_ADDR_NAMESEQ: int -TIPC_CFG_SRV: int -TIPC_CLUSTER_SCOPE: int -TIPC_CONN_TIMEOUT: int -TIPC_CRITICAL_IMPORTANCE: int -TIPC_DEST_DROPPABLE: int -TIPC_HIGH_IMPORTANCE: int -TIPC_IMPORTANCE: int -TIPC_LOW_IMPORTANCE: int -TIPC_MEDIUM_IMPORTANCE: int -TIPC_NODE_SCOPE: int -TIPC_PUBLISHED: int -TIPC_SRC_DROPPABLE: int -TIPC_SUB_CANCEL: int -TIPC_SUB_PORTS: int -TIPC_SUB_SERVICE: int -TIPC_SUBSCR_TIMEOUT: int -TIPC_TOP_SRV: int -TIPC_WAIT_FOREVER: int -TIPC_WITHDRAWN: int -TIPC_ZONE_SCOPE: int +if sys.version_info >= (3, 7): + TCP_NOTSENT_LOWAT: int -if sys.version_info >= (3, 3): +# Specifically-documented constants + +if sys.platform == 'linux' and sys.version_info >= (3,): + AF_CAN: AddressFamily + PF_CAN: int + SOL_CAN_BASE: int + SOL_CAN_RAW: int + CAN_EFF_FLAG: int + CAN_EFF_MASK: int + CAN_ERR_FLAG: int + CAN_ERR_MASK: int + CAN_RAW: int + CAN_RAW_ERR_FILTER: int + CAN_RAW_FILTER: int + CAN_RAW_LOOPBACK: int + CAN_RAW_RECV_OWN_MSGS: int + CAN_RTR_FLAG: int + CAN_SFF_MASK: int + + CAN_BCM: int + CAN_BCM_TX_SETUP: int + CAN_BCM_TX_DELETE: int + CAN_BCM_TX_READ: int + CAN_BCM_TX_SEND: int + CAN_BCM_RX_SETUP: int + CAN_BCM_RX_DELETE: int + CAN_BCM_RX_READ: int + CAN_BCM_TX_STATUS: int + CAN_BCM_TX_EXPIRED: int + CAN_BCM_RX_STATUS: int + CAN_BCM_RX_TIMEOUT: int + CAN_BCM_RX_CHANGED: int + + CAN_RAW_FD_FRAMES: int + +if sys.platform == 'linux' and sys.version_info >= (3, 7): + CAN_ISOTP: int + +if sys.platform == 'linux': + AF_PACKET: AddressFamily + PF_PACKET: int + PACKET_BROADCAST: int + PACKET_FASTROUTE: int + PACKET_HOST: int + PACKET_LOOPBACK: int + PACKET_MULTICAST: int + PACKET_OTHERHOST: int + PACKET_OUTGOING: int + +if sys.platform == 'linux' and sys.version_info >= (3,): + AF_RDS: AddressFamily + PF_RDS: int + SOL_RDS: int RDS_CANCEL_SENT_TO: int RDS_CMSG_RDMA_ARGS: int RDS_CMSG_RDMA_DEST: int @@ -355,58 +359,130 @@ if sys.version_info >= (3, 3): RDS_RDMA_USE_ONCE: int RDS_RECVERR: int -if sys.version_info >= (3, 4): - CAN_BCM: int - CAN_BCM_TX_SETUP: int - CAN_BCM_TX_DELETE: int - CAN_BCM_TX_READ: int - CAN_BCM_TX_SEND: int - CAN_BCM_RX_SETUP: int - CAN_BCM_RX_DELETE: int - CAN_BCM_RX_READ: int - CAN_BCM_TX_STATUS: int - CAN_BCM_TX_EXPIRED: int - CAN_BCM_RX_STATUS: int - CAN_BCM_RX_TIMEOUT: int - CAN_BCM_RX_CHANGED: int - AF_LINK: AddressFamily - -if sys.version_info >= (3, 5): - CAN_RAW_FD_FRAMES: int - -if sys.version_info >= (3, 6): - SO_DOMAIN: int - SO_PROTOCOL: int - SO_PEERSEC: int - SO_PASSSEC: int - TCP_USER_TIMEOUT: int - TCP_CONGESTION: int - AF_ALG: AddressFamily - SOL_ALG: int - ALG_SET_KEY: int - ALG_SET_IV: int - ALG_SET_OP: int - ALG_SET_AEAD_ASSOCLEN: int - ALG_SET_AEAD_AUTHSIZE: int - ALG_SET_PUBKEY: int - ALG_OP_DECRYPT: int - ALG_OP_ENCRYPT: int - ALG_OP_SIGN: int - ALG_OP_VERIFY: int - if sys.platform == 'win32': SIO_RCVALL: int SIO_KEEPALIVE_VALS: int + if sys.version_info >= (3, 6): + SIO_LOOPBACK_FAST_PATH: int RCVALL_IPLEVEL: int RCVALL_MAX: int RCVALL_OFF: int RCVALL_ON: int RCVALL_SOCKETLEVELONLY: int - if sys.version_info >= (3, 6): - SIO_LOOPBACK_FAST_PATH: int +if sys.platform == 'linux': + AF_TIPC: AddressFamily + SOL_TIPC: int + TIPC_ADDR_ID: int + TIPC_ADDR_NAME: int + TIPC_ADDR_NAMESEQ: int + TIPC_CFG_SRV: int + TIPC_CLUSTER_SCOPE: int + TIPC_CONN_TIMEOUT: int + TIPC_CRITICAL_IMPORTANCE: int + TIPC_DEST_DROPPABLE: int + TIPC_HIGH_IMPORTANCE: int + TIPC_IMPORTANCE: int + TIPC_LOW_IMPORTANCE: int + TIPC_MEDIUM_IMPORTANCE: int + TIPC_NODE_SCOPE: int + TIPC_PUBLISHED: int + TIPC_SRC_DROPPABLE: int + TIPC_SUBSCR_TIMEOUT: int + TIPC_SUB_CANCEL: int + TIPC_SUB_PORTS: int + TIPC_SUB_SERVICE: int + TIPC_TOP_SRV: int + TIPC_WAIT_FOREVER: int + TIPC_WITHDRAWN: int + TIPC_ZONE_SCOPE: int -# enum versions of above flags py 3.4+ +if sys.platform == 'linux' and sys.version_info >= (3, 6): + AF_ALG: AddressFamily + SOL_ALG: int + ALG_OP_DECRYPT: int + ALG_OP_ENCRYPT: int + ALG_OP_SIGN: int + ALG_OP_VERIFY: int + ALG_SET_AEAD_ASSOCLEN: int + ALG_SET_AEAD_AUTHSIZE: int + ALG_SET_IV: int + ALG_SET_KEY: int + ALG_SET_OP: int + ALG_SET_PUBKEY: int + +if sys.platform == 'linux' and sys.version_info >= (3, 7): + AF_VSOCK: AddressFamily + IOCTL_VM_SOCKETS_GET_LOCAL_CID: int + VMADDR_CID_ANY: int + VMADDR_CID_HOST: int + VMADDR_PORT_ANY: int + SO_VM_SOCKETS_BUFFER_MAX_SIZE: int + SO_VM_SOCKETS_BUFFER_SIZE: int + SO_VM_SOCKETS_BUFFER_MIN_SIZE: int + VM_SOCKETS_INVALID_VERSION: int + +AF_LINK: AddressFamily # Availability: BSD, macOS + +# BDADDR_* and HCI_* listed with other bluetooth constants below + +if sys.version_info >= (3, 6): + SO_DOMAIN: int + SO_PASSSEC: int + SO_PEERSEC: int + SO_PROTOCOL: int + TCP_CONGESTION: int + TCP_USER_TIMEOUT: int + +if sys.platform == 'linux' and sys.version_info >= (3, 8): + AF_QIPCRTR: AddressFamily + + +# Semi-documented constants +# (Listed under "Socket families" in the docs, but not "Constants") + +if sys.platform == 'linux': + # Netlink is defined by Linux + AF_NETLINK: AddressFamily + NETLINK_ARPD: int + NETLINK_CRYPTO: int + NETLINK_DNRTMSG: int + NETLINK_FIREWALL: int + NETLINK_IP6_FW: int + NETLINK_NFLOG: int + NETLINK_ROUTE6: int + NETLINK_ROUTE: int + NETLINK_SKIP: int + NETLINK_TAPBASE: int + NETLINK_TCPDIAG: int + NETLINK_USERSOCK: int + NETLINK_W1: int + NETLINK_XFRM: 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 + AF_BLUETOOTH: AddressFamily + BTPROTO_HCI: int + BTPROTO_L2CAP: int + BTPROTO_RFCOMM: int + BTPROTO_SCO: int # not in FreeBSD + + BDADDR_ANY: str + BDADDR_LOCAL: str + + HCI_FILTER: int # not in NetBSD or DragonFlyBSD + # not in FreeBSD, NetBSD, or DragonFlyBSD + HCI_TIME_STAMP: int + HCI_DATA_DIR: int + +if sys.platform == 'darwin': + # PF_SYSTEM is defined by macOS + PF_SYSTEM: int + SYSPROTO_CONTROL: int + + +# enum versions of above flags if sys.version_info >= (3, 4): from enum import IntEnum @@ -414,6 +490,8 @@ if sys.version_info >= (3, 4): AF_UNIX: int AF_INET: int AF_INET6: int + AF_AAL5: int + AF_ALG: int AF_APPLETALK: int AF_ASH: int AF_ATMPVC: int @@ -421,26 +499,31 @@ if sys.version_info >= (3, 4): AF_AX25: int AF_BLUETOOTH: int AF_BRIDGE: int + AF_CAN: int AF_DECnet: int AF_ECONET: int AF_IPX: int AF_IRDA: int AF_KEY: int + AF_LINK: int AF_LLC: int AF_NETBEUI: int AF_NETLINK: int AF_NETROM: int AF_PACKET: int AF_PPPOX: int + AF_QIPCRTR: int + AF_RDS: int AF_ROSE: int AF_ROUTE: int AF_SECURITY: int AF_SNA: int + AF_SYSTEM: int AF_TIPC: int AF_UNSPEC: int + AF_VSOCK: int AF_WANPIPE: int AF_X25: int - AF_LINK: int class SocketKind(IntEnum): SOCK_STREAM: int @@ -480,7 +563,8 @@ else: MsgFlag = int -# ----- exceptions ----- +# ----- Exceptions ----- + if sys.version_info < (3,): class error(IOError): ... else: @@ -496,18 +580,19 @@ class timeout(error): def __init__(self, error: int = ..., string: str = ...) -> None: ... +# ----- Classes ----- + # Addresses can be either tuples of varying lengths (AF_INET, AF_INET6, # AF_NETLINK, AF_TIPC) or strings (AF_UNIX). - _Address = Union[tuple, str] _RetAddress = Any +# TODO Most methods allow bytes as address objects -# TODO AF_PACKET and AF_BLUETOOTH address objects +_WriteBuffer = Union[bytearray, memoryview] _CMSG = Tuple[int, int, bytes] _SelfT = TypeVar('_SelfT', bound=socket) -# ----- classes ----- class socket: family: int type: int @@ -517,8 +602,6 @@ class socket: def __init__(self, family: int = ..., type: int = ..., proto: int = ...) -> None: ... else: def __init__(self, family: int = ..., type: int = ..., proto: int = ..., fileno: Optional[int] = ...) -> None: ... - - if sys.version_info >= (3, 2): def __enter__(self: _SelfT) -> _SelfT: ... def __exit__(self, *args: Any) -> None: ... @@ -529,8 +612,10 @@ class socket: def connect(self, address: Union[_Address, bytes]) -> None: ... def connect_ex(self, address: Union[_Address, bytes]) -> int: ... def detach(self) -> int: ... + def dup(self) -> socket: ... def fileno(self) -> int: ... - + if sys.version_info >= (3, 4): + def get_inheritable(self) -> bool: ... def getpeername(self) -> _RetAddress: ... def getsockname(self) -> _RetAddress: ... @@ -539,71 +624,118 @@ class socket: @overload def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... + if sys.version_info >= (3, 7): + def getblocking(self) -> bool: ... def gettimeout(self) -> Optional[float]: ... - def ioctl(self, control: object, - option: Tuple[int, int, int]) -> None: ... - if sys.version_info < (3, 5): - def listen(self, backlog: int) -> None: ... - else: - def listen(self, backlog: int = ...) -> None: ... - # TODO the return value may be BinaryIO or TextIO, depending on mode - def makefile(self, mode: str = ..., buffering: int = ..., - encoding: str = ..., errors: str = ..., - newline: str = ...) -> Any: - ... - def recv(self, bufsize: int, flags: int = ...) -> bytes: ... + if sys.platform == 'win32': + def ioctl(self, control: object, option: Tuple[int, int, int]) -> None: ... + + if sys.version_info >= (3, 5): + def listen(self, __backlog: int = ...) -> None: ... + else: + def listen(self, __backlog: int) -> None: ... + # Note that the makefile's documented windows-specific behavior is not represented + if sys.version_info < (3,): + def makefile(self, mode: unicode = ..., buffering: int = ...) -> BinaryIO: ... + else: + # mode strings with duplicates are intentionally excluded + @overload + def makefile(self, + mode: Literal['r', 'w', 'rw', 'wr', ''], + buffering: Optional[int] = ..., + *, + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + newline: Optional[str] = ...) -> TextIO: ... + @overload + def makefile(self, + mode: Literal['b', 'rb', 'br', 'wb', 'bw', 'rwb', 'rbw', 'wrb', 'wbr', 'brw', 'bwr'] = ..., + buffering: Optional[int] = ..., + *, + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + newline: Optional[str] = ...) -> BinaryIO: ... + def recv(self, bufsize: int, flags: int = ...) -> bytes: ... def recvfrom(self, bufsize: int, flags: int = ...) -> Tuple[bytes, _RetAddress]: ... - def recvfrom_into(self, buffer: _WriteBuffer, nbytes: int, - flags: int = ...) -> Tuple[int, _RetAddress]: ... - def recv_into(self, buffer: _WriteBuffer, nbytes: int, - flags: int = ...) -> int: ... + + if sys.version_info >= (3, 3): + def recvmsg(self, __bufsize: int, __ancbufsize: int = ..., __flags: int = ...) -> Tuple[bytes, List[_CMSG], int, Any]: ... + def recvmsg_into(self, + __buffers: Iterable[_WriteBuffer], + __ancbufsize: int = ..., + __flags: int = ...) -> Tuple[int, List[_CMSG], int, Any]: ... + def recvfrom_into(self, buffer: _WriteBuffer, nbytes: int = ..., flags: int = ...) -> Tuple[int, _RetAddress]: ... + def recv_into(self, buffer: _WriteBuffer, nbytes: int = ..., flags: int = ...) -> int: ... def send(self, data: bytes, flags: int = ...) -> int: ... - def sendall(self, data: bytes, flags: int = ...) -> None: - ... # return type: None on success + def sendall(self, data: bytes, flags: int = ...) -> None: ... # return type: None on success @overload def sendto(self, data: bytes, address: _Address) -> int: ... @overload def sendto(self, data: bytes, flags: int, address: _Address) -> int: ... + if sys.version_info >= (3, 3): + def sendmsg(self, + __buffers: Iterable[bytes], + __ancdata: Iterable[_CMSG] = ..., + __flags: int = ..., + __address: _Address = ...) -> int: ... + if sys.platform == 'linux' and sys.version_info >= (3, 6): + # TODO add the parameter types for sendmsg_afalg + def sendmsg_afalg(self, msg=..., *, op, iv=..., assoclen=..., flags=...) -> int: ... + + if sys.version_info >= (3,): + # TODO determine legal types for file parameter + def sendfile(self, file, offset: int = ..., count: Optional[int] = ...) -> int: ... + def set_inheritable(self, inheritable: bool) -> None: ... def setblocking(self, flag: bool) -> None: ... def settimeout(self, value: Optional[float]) -> None: ... - def setsockopt(self, level: int, optname: int, value: Union[int, bytes]) -> None: ... + + if sys.version_info < (3, 6): + def setsockopt(self, level: int, optname: int, value: Union[int, bytes]) -> None: ... + else: + @overload + def setsockopt(self, level: int, optname: int, value: Union[int, bytes]) -> 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: ... - if sys.version_info >= (3, 3): - def recvmsg(self, __bufsize: int, __ancbufsize: int = ..., - __flags: int = ...) -> Tuple[bytes, List[_CMSG], int, Any]: ... - def recvmsg_into(self, __buffers: Iterable[_WriteBuffer], __ancbufsize: int = ..., - __flags: int = ...) -> Tuple[int, List[_CMSG], int, Any]: ... - def sendmsg(self, __buffers: Iterable[bytes], __ancdata: Iterable[_CMSG] = ..., - __flags: int = ..., __address: _Address = ...) -> int: ... - if sys.version_info >= (3, 4): - def set_inheritable(self, inheritable: bool) -> None: ... +# ----- Functions ----- + +if sys.version_info >= (3, 7): + def close(fd: int) -> None: ... -# ----- functions ----- def create_connection(address: Tuple[Optional[str], int], timeout: Optional[float] = ..., source_address: Tuple[Union[bytearray, bytes, Text], int] = ...) -> socket: ... + if sys.version_info >= (3, 8): + def create_server(address: _Address, + *, + family: int = ..., + backlog: Optional[int] = ..., + reuse_port: bool = ..., + dualstack_ipv6: bool = ...) -> socket: ... def has_dualstack_ipv6() -> bool: ... - def create_server( - address: Tuple[str, int], - *, - family: AddressFamily = ..., - backlog: Optional[int] = ..., - reuse_port: bool = ..., - dualstack_ipv6: bool = ..., - ) -> socket: ... + +def fromfd(fd: int, family: int, type: int, proto: int = ...) -> socket: ... + +if sys.platform == 'win32' and sys.version_info >= (3, 3): + def fromshare(data: bytes) -> socket: ... # the 5th tuple item is an address # TODO the "Tuple[Any, ...]" should be "Union[Tuple[str, int], Tuple[str, int, int, int]]" but that triggers # https://github.com/python/mypy/issues/2509 -def getaddrinfo( - host: Optional[Union[bytearray, bytes, Text]], port: Union[str, int, None], family: int = ..., - socktype: int = ..., proto: int = ..., - flags: int = ...) -> List[Tuple[AddressFamily, SocketKind, int, str, Tuple[Any, ...]]]: - ... +def getaddrinfo(host: Optional[Union[bytearray, bytes, Text]], + port: Union[str, int, None], + family: int = ..., + socktype: int = ..., + proto: int = ..., + flags: int = ...) -> List[Tuple[AddressFamily, SocketKind, int, str, Tuple[Any, ...]]]: ... def getfqdn(name: str = ...) -> str: ... def gethostbyname(hostname: str) -> str: ... @@ -614,10 +746,7 @@ def getnameinfo(sockaddr: Union[Tuple[str, int], Tuple[str, int, int, int]], fla def getprotobyname(protocolname: str) -> int: ... def getservbyname(servicename: str, protocolname: str = ...) -> int: ... def getservbyport(port: int, protocolname: str = ...) -> str: ... -def socketpair(family: int = ..., - type: int = ..., - proto: int = ...) -> Tuple[socket, socket]: ... -def fromfd(fd: int, family: int, type: int, proto: int = ...) -> socket: ... +def socketpair(family: int = ..., type: int = ..., proto: int = ...) -> Tuple[socket, socket]: ... 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 @@ -626,12 +755,12 @@ def inet_aton(ip_string: str) -> bytes: ... # ret val 4 bytes in length def inet_ntoa(packed_ip: bytes) -> str: ... def inet_pton(address_family: int, ip_string: str) -> bytes: ... def inet_ntop(address_family: int, packed_ip: bytes) -> str: ... -def getdefaulttimeout() -> Optional[float]: ... -def setdefaulttimeout(timeout: Optional[float]) -> None: ... - if sys.version_info >= (3, 3): def CMSG_LEN(length: int) -> int: ... def CMSG_SPACE(length: int) -> int: ... +def getdefaulttimeout() -> Optional[float]: ... +def setdefaulttimeout(timeout: Optional[float]) -> None: ... +if sys.version_info >= (3, 3): def sethostname(name: str) -> None: ... def if_nameindex() -> List[Tuple[int, str]]: ... def if_nametoindex(name: str) -> int: ...