1import sys
2from _typeshed import ReadableBuffer, Self, WriteableBuffer
3from collections.abc import Iterable
4from enum import IntEnum, IntFlag
5from io import RawIOBase
6from typing import Any, BinaryIO, Optional, TextIO, TypeVar, Union, overload
7from typing_extensions import Literal
8
9# Ideally, we'd just do "from _socket import *". Unfortunately, socket
10# overrides some definitions from _socket incompatibly. mypy incorrectly
11# prefers the definitions from _socket over those defined here.
12import _socket
13from _socket import (
14    _FD,
15    CMSG_LEN as CMSG_LEN,
16    CMSG_SPACE as CMSG_SPACE,
17    EAI_ADDRFAMILY as EAI_ADDRFAMILY,
18    EAI_AGAIN as EAI_AGAIN,
19    EAI_BADFLAGS as EAI_BADFLAGS,
20    EAI_BADHINTS as EAI_BADHINTS,
21    EAI_FAIL as EAI_FAIL,
22    EAI_FAMILY as EAI_FAMILY,
23    EAI_MAX as EAI_MAX,
24    EAI_MEMORY as EAI_MEMORY,
25    EAI_NODATA as EAI_NODATA,
26    EAI_NONAME as EAI_NONAME,
27    EAI_OVERFLOW as EAI_OVERFLOW,
28    EAI_PROTOCOL as EAI_PROTOCOL,
29    EAI_SERVICE as EAI_SERVICE,
30    EAI_SOCKTYPE as EAI_SOCKTYPE,
31    EAI_SYSTEM as EAI_SYSTEM,
32    INADDR_ALLHOSTS_GROUP as INADDR_ALLHOSTS_GROUP,
33    INADDR_ANY as INADDR_ANY,
34    INADDR_BROADCAST as INADDR_BROADCAST,
35    INADDR_LOOPBACK as INADDR_LOOPBACK,
36    INADDR_MAX_LOCAL_GROUP as INADDR_MAX_LOCAL_GROUP,
37    INADDR_NONE as INADDR_NONE,
38    INADDR_UNSPEC_GROUP as INADDR_UNSPEC_GROUP,
39    IP_ADD_MEMBERSHIP as IP_ADD_MEMBERSHIP,
40    IP_DEFAULT_MULTICAST_LOOP as IP_DEFAULT_MULTICAST_LOOP,
41    IP_DEFAULT_MULTICAST_TTL as IP_DEFAULT_MULTICAST_TTL,
42    IP_DROP_MEMBERSHIP as IP_DROP_MEMBERSHIP,
43    IP_HDRINCL as IP_HDRINCL,
44    IP_MAX_MEMBERSHIPS as IP_MAX_MEMBERSHIPS,
45    IP_MULTICAST_IF as IP_MULTICAST_IF,
46    IP_MULTICAST_LOOP as IP_MULTICAST_LOOP,
47    IP_MULTICAST_TTL as IP_MULTICAST_TTL,
48    IP_OPTIONS as IP_OPTIONS,
49    IP_RECVDSTADDR as IP_RECVDSTADDR,
50    IP_RECVOPTS as IP_RECVOPTS,
51    IP_RECVRETOPTS as IP_RECVRETOPTS,
52    IP_RETOPTS as IP_RETOPTS,
53    IP_TOS as IP_TOS,
54    IP_TRANSPARENT as IP_TRANSPARENT,
55    IP_TTL as IP_TTL,
56    IPPORT_RESERVED as IPPORT_RESERVED,
57    IPPORT_USERRESERVED as IPPORT_USERRESERVED,
58    IPPROTO_AH as IPPROTO_AH,
59    IPPROTO_BIP as IPPROTO_BIP,
60    IPPROTO_DSTOPTS as IPPROTO_DSTOPTS,
61    IPPROTO_EGP as IPPROTO_EGP,
62    IPPROTO_EON as IPPROTO_EON,
63    IPPROTO_ESP as IPPROTO_ESP,
64    IPPROTO_FRAGMENT as IPPROTO_FRAGMENT,
65    IPPROTO_GGP as IPPROTO_GGP,
66    IPPROTO_GRE as IPPROTO_GRE,
67    IPPROTO_HELLO as IPPROTO_HELLO,
68    IPPROTO_HOPOPTS as IPPROTO_HOPOPTS,
69    IPPROTO_ICMP as IPPROTO_ICMP,
70    IPPROTO_ICMPV6 as IPPROTO_ICMPV6,
71    IPPROTO_IDP as IPPROTO_IDP,
72    IPPROTO_IGMP as IPPROTO_IGMP,
73    IPPROTO_IP as IPPROTO_IP,
74    IPPROTO_IPCOMP as IPPROTO_IPCOMP,
75    IPPROTO_IPIP as IPPROTO_IPIP,
76    IPPROTO_IPV4 as IPPROTO_IPV4,
77    IPPROTO_IPV6 as IPPROTO_IPV6,
78    IPPROTO_MAX as IPPROTO_MAX,
79    IPPROTO_MOBILE as IPPROTO_MOBILE,
80    IPPROTO_ND as IPPROTO_ND,
81    IPPROTO_NONE as IPPROTO_NONE,
82    IPPROTO_PIM as IPPROTO_PIM,
83    IPPROTO_PUP as IPPROTO_PUP,
84    IPPROTO_RAW as IPPROTO_RAW,
85    IPPROTO_ROUTING as IPPROTO_ROUTING,
86    IPPROTO_RSVP as IPPROTO_RSVP,
87    IPPROTO_SCTP as IPPROTO_SCTP,
88    IPPROTO_TCP as IPPROTO_TCP,
89    IPPROTO_TP as IPPROTO_TP,
90    IPPROTO_UDP as IPPROTO_UDP,
91    IPPROTO_VRRP as IPPROTO_VRRP,
92    IPPROTO_XTP as IPPROTO_XTP,
93    IPV6_CHECKSUM as IPV6_CHECKSUM,
94    IPV6_DONTFRAG as IPV6_DONTFRAG,
95    IPV6_DSTOPTS as IPV6_DSTOPTS,
96    IPV6_HOPLIMIT as IPV6_HOPLIMIT,
97    IPV6_HOPOPTS as IPV6_HOPOPTS,
98    IPV6_JOIN_GROUP as IPV6_JOIN_GROUP,
99    IPV6_LEAVE_GROUP as IPV6_LEAVE_GROUP,
100    IPV6_MULTICAST_HOPS as IPV6_MULTICAST_HOPS,
101    IPV6_MULTICAST_IF as IPV6_MULTICAST_IF,
102    IPV6_MULTICAST_LOOP as IPV6_MULTICAST_LOOP,
103    IPV6_NEXTHOP as IPV6_NEXTHOP,
104    IPV6_PATHMTU as IPV6_PATHMTU,
105    IPV6_PKTINFO as IPV6_PKTINFO,
106    IPV6_RECVDSTOPTS as IPV6_RECVDSTOPTS,
107    IPV6_RECVHOPLIMIT as IPV6_RECVHOPLIMIT,
108    IPV6_RECVHOPOPTS as IPV6_RECVHOPOPTS,
109    IPV6_RECVPATHMTU as IPV6_RECVPATHMTU,
110    IPV6_RECVPKTINFO as IPV6_RECVPKTINFO,
111    IPV6_RECVRTHDR as IPV6_RECVRTHDR,
112    IPV6_RECVTCLASS as IPV6_RECVTCLASS,
113    IPV6_RTHDR as IPV6_RTHDR,
114    IPV6_RTHDR_TYPE_0 as IPV6_RTHDR_TYPE_0,
115    IPV6_RTHDRDSTOPTS as IPV6_RTHDRDSTOPTS,
116    IPV6_TCLASS as IPV6_TCLASS,
117    IPV6_UNICAST_HOPS as IPV6_UNICAST_HOPS,
118    IPV6_USE_MIN_MTU as IPV6_USE_MIN_MTU,
119    IPV6_V6ONLY as IPV6_V6ONLY,
120    IPX_TYPE as IPX_TYPE,
121    LOCAL_PEERCRED as LOCAL_PEERCRED,
122    NI_DGRAM as NI_DGRAM,
123    NI_MAXHOST as NI_MAXHOST,
124    NI_MAXSERV as NI_MAXSERV,
125    NI_NAMEREQD as NI_NAMEREQD,
126    NI_NOFQDN as NI_NOFQDN,
127    NI_NUMERICHOST as NI_NUMERICHOST,
128    NI_NUMERICSERV as NI_NUMERICSERV,
129    SCM_CREDENTIALS as SCM_CREDENTIALS,
130    SCM_CREDS as SCM_CREDS,
131    SCM_RIGHTS as SCM_RIGHTS,
132    SHUT_RD as SHUT_RD,
133    SHUT_RDWR as SHUT_RDWR,
134    SHUT_WR as SHUT_WR,
135    SO_ACCEPTCONN as SO_ACCEPTCONN,
136    SO_BINDTODEVICE as SO_BINDTODEVICE,
137    SO_BROADCAST as SO_BROADCAST,
138    SO_DEBUG as SO_DEBUG,
139    SO_DONTROUTE as SO_DONTROUTE,
140    SO_ERROR as SO_ERROR,
141    SO_EXCLUSIVEADDRUSE as SO_EXCLUSIVEADDRUSE,
142    SO_KEEPALIVE as SO_KEEPALIVE,
143    SO_LINGER as SO_LINGER,
144    SO_MARK as SO_MARK,
145    SO_OOBINLINE as SO_OOBINLINE,
146    SO_PASSCRED as SO_PASSCRED,
147    SO_PEERCRED as SO_PEERCRED,
148    SO_PRIORITY as SO_PRIORITY,
149    SO_RCVBUF as SO_RCVBUF,
150    SO_RCVLOWAT as SO_RCVLOWAT,
151    SO_RCVTIMEO as SO_RCVTIMEO,
152    SO_REUSEADDR as SO_REUSEADDR,
153    SO_REUSEPORT as SO_REUSEPORT,
154    SO_SETFIB as SO_SETFIB,
155    SO_SNDBUF as SO_SNDBUF,
156    SO_SNDLOWAT as SO_SNDLOWAT,
157    SO_SNDTIMEO as SO_SNDTIMEO,
158    SO_TYPE as SO_TYPE,
159    SO_USELOOPBACK as SO_USELOOPBACK,
160    SOL_ATALK as SOL_ATALK,
161    SOL_AX25 as SOL_AX25,
162    SOL_HCI as SOL_HCI,
163    SOL_IP as SOL_IP,
164    SOL_IPX as SOL_IPX,
165    SOL_NETROM as SOL_NETROM,
166    SOL_ROSE as SOL_ROSE,
167    SOL_SOCKET as SOL_SOCKET,
168    SOL_TCP as SOL_TCP,
169    SOL_UDP as SOL_UDP,
170    SOMAXCONN as SOMAXCONN,
171    TCP_CORK as TCP_CORK,
172    TCP_DEFER_ACCEPT as TCP_DEFER_ACCEPT,
173    TCP_FASTOPEN as TCP_FASTOPEN,
174    TCP_INFO as TCP_INFO,
175    TCP_KEEPCNT as TCP_KEEPCNT,
176    TCP_KEEPIDLE as TCP_KEEPIDLE,
177    TCP_KEEPINTVL as TCP_KEEPINTVL,
178    TCP_LINGER2 as TCP_LINGER2,
179    TCP_MAXSEG as TCP_MAXSEG,
180    TCP_NODELAY as TCP_NODELAY,
181    TCP_QUICKACK as TCP_QUICKACK,
182    TCP_SYNCNT as TCP_SYNCNT,
183    TCP_WINDOW_CLAMP as TCP_WINDOW_CLAMP,
184    SocketType as SocketType,
185    _Address as _Address,
186    _RetAddress as _RetAddress,
187    dup as dup,
188    error as error,
189    gaierror as gaierror,
190    getdefaulttimeout as getdefaulttimeout,
191    gethostbyaddr as gethostbyaddr,
192    gethostbyname as gethostbyname,
193    gethostbyname_ex as gethostbyname_ex,
194    gethostname as gethostname,
195    getnameinfo as getnameinfo,
196    getprotobyname as getprotobyname,
197    getservbyname as getservbyname,
198    getservbyport as getservbyport,
199    has_ipv6 as has_ipv6,
200    herror as herror,
201    htonl as htonl,
202    htons as htons,
203    inet_aton as inet_aton,
204    inet_ntoa as inet_ntoa,
205    inet_ntop as inet_ntop,
206    inet_pton as inet_pton,
207    ntohl as ntohl,
208    ntohs as ntohs,
209    setdefaulttimeout as setdefaulttimeout,
210    timeout as timeout,
211)
212
213if sys.version_info >= (3, 7):
214    from _socket import close as close
215if sys.platform != "win32":
216    from _socket import sethostname as sethostname
217if sys.platform != "win32" or sys.version_info >= (3, 8):
218    from _socket import if_indextoname as if_indextoname, if_nameindex as if_nameindex, if_nametoindex as if_nametoindex
219if sys.platform == "linux":
220    from _socket import (
221        ALG_OP_DECRYPT as ALG_OP_DECRYPT,
222        ALG_OP_ENCRYPT as ALG_OP_ENCRYPT,
223        ALG_OP_SIGN as ALG_OP_SIGN,
224        ALG_OP_VERIFY as ALG_OP_VERIFY,
225        ALG_SET_AEAD_ASSOCLEN as ALG_SET_AEAD_ASSOCLEN,
226        ALG_SET_AEAD_AUTHSIZE as ALG_SET_AEAD_AUTHSIZE,
227        ALG_SET_IV as ALG_SET_IV,
228        ALG_SET_KEY as ALG_SET_KEY,
229        ALG_SET_OP as ALG_SET_OP,
230        ALG_SET_PUBKEY as ALG_SET_PUBKEY,
231        CAN_BCM as CAN_BCM,
232        CAN_BCM_RX_CHANGED as CAN_BCM_RX_CHANGED,
233        CAN_BCM_RX_DELETE as CAN_BCM_RX_DELETE,
234        CAN_BCM_RX_READ as CAN_BCM_RX_READ,
235        CAN_BCM_RX_SETUP as CAN_BCM_RX_SETUP,
236        CAN_BCM_RX_STATUS as CAN_BCM_RX_STATUS,
237        CAN_BCM_RX_TIMEOUT as CAN_BCM_RX_TIMEOUT,
238        CAN_BCM_TX_DELETE as CAN_BCM_TX_DELETE,
239        CAN_BCM_TX_EXPIRED as CAN_BCM_TX_EXPIRED,
240        CAN_BCM_TX_READ as CAN_BCM_TX_READ,
241        CAN_BCM_TX_SEND as CAN_BCM_TX_SEND,
242        CAN_BCM_TX_SETUP as CAN_BCM_TX_SETUP,
243        CAN_BCM_TX_STATUS as CAN_BCM_TX_STATUS,
244        CAN_EFF_FLAG as CAN_EFF_FLAG,
245        CAN_EFF_MASK as CAN_EFF_MASK,
246        CAN_ERR_FLAG as CAN_ERR_FLAG,
247        CAN_ERR_MASK as CAN_ERR_MASK,
248        CAN_RAW as CAN_RAW,
249        CAN_RAW_ERR_FILTER as CAN_RAW_ERR_FILTER,
250        CAN_RAW_FD_FRAMES as CAN_RAW_FD_FRAMES,
251        CAN_RAW_FILTER as CAN_RAW_FILTER,
252        CAN_RAW_LOOPBACK as CAN_RAW_LOOPBACK,
253        CAN_RAW_RECV_OWN_MSGS as CAN_RAW_RECV_OWN_MSGS,
254        CAN_RTR_FLAG as CAN_RTR_FLAG,
255        CAN_SFF_MASK as CAN_SFF_MASK,
256        PACKET_BROADCAST as PACKET_BROADCAST,
257        PACKET_FASTROUTE as PACKET_FASTROUTE,
258        PACKET_HOST as PACKET_HOST,
259        PACKET_LOOPBACK as PACKET_LOOPBACK,
260        PACKET_MULTICAST as PACKET_MULTICAST,
261        PACKET_OTHERHOST as PACKET_OTHERHOST,
262        PACKET_OUTGOING as PACKET_OUTGOING,
263        PF_CAN as PF_CAN,
264        PF_PACKET as PF_PACKET,
265        PF_RDS as PF_RDS,
266        RDS_CANCEL_SENT_TO as RDS_CANCEL_SENT_TO,
267        RDS_CMSG_RDMA_ARGS as RDS_CMSG_RDMA_ARGS,
268        RDS_CMSG_RDMA_DEST as RDS_CMSG_RDMA_DEST,
269        RDS_CMSG_RDMA_MAP as RDS_CMSG_RDMA_MAP,
270        RDS_CMSG_RDMA_STATUS as RDS_CMSG_RDMA_STATUS,
271        RDS_CMSG_RDMA_UPDATE as RDS_CMSG_RDMA_UPDATE,
272        RDS_CONG_MONITOR as RDS_CONG_MONITOR,
273        RDS_FREE_MR as RDS_FREE_MR,
274        RDS_GET_MR as RDS_GET_MR,
275        RDS_GET_MR_FOR_DEST as RDS_GET_MR_FOR_DEST,
276        RDS_RDMA_DONTWAIT as RDS_RDMA_DONTWAIT,
277        RDS_RDMA_FENCE as RDS_RDMA_FENCE,
278        RDS_RDMA_INVALIDATE as RDS_RDMA_INVALIDATE,
279        RDS_RDMA_NOTIFY_ME as RDS_RDMA_NOTIFY_ME,
280        RDS_RDMA_READWRITE as RDS_RDMA_READWRITE,
281        RDS_RDMA_SILENT as RDS_RDMA_SILENT,
282        RDS_RDMA_USE_ONCE as RDS_RDMA_USE_ONCE,
283        RDS_RECVERR as RDS_RECVERR,
284        SOL_ALG as SOL_ALG,
285        SOL_CAN_BASE as SOL_CAN_BASE,
286        SOL_CAN_RAW as SOL_CAN_RAW,
287        SOL_RDS as SOL_RDS,
288        SOL_TIPC as SOL_TIPC,
289        TIPC_ADDR_ID as TIPC_ADDR_ID,
290        TIPC_ADDR_NAME as TIPC_ADDR_NAME,
291        TIPC_ADDR_NAMESEQ as TIPC_ADDR_NAMESEQ,
292        TIPC_CFG_SRV as TIPC_CFG_SRV,
293        TIPC_CLUSTER_SCOPE as TIPC_CLUSTER_SCOPE,
294        TIPC_CONN_TIMEOUT as TIPC_CONN_TIMEOUT,
295        TIPC_CRITICAL_IMPORTANCE as TIPC_CRITICAL_IMPORTANCE,
296        TIPC_DEST_DROPPABLE as TIPC_DEST_DROPPABLE,
297        TIPC_HIGH_IMPORTANCE as TIPC_HIGH_IMPORTANCE,
298        TIPC_IMPORTANCE as TIPC_IMPORTANCE,
299        TIPC_LOW_IMPORTANCE as TIPC_LOW_IMPORTANCE,
300        TIPC_MEDIUM_IMPORTANCE as TIPC_MEDIUM_IMPORTANCE,
301        TIPC_NODE_SCOPE as TIPC_NODE_SCOPE,
302        TIPC_PUBLISHED as TIPC_PUBLISHED,
303        TIPC_SRC_DROPPABLE as TIPC_SRC_DROPPABLE,
304        TIPC_SUB_CANCEL as TIPC_SUB_CANCEL,
305        TIPC_SUB_PORTS as TIPC_SUB_PORTS,
306        TIPC_SUB_SERVICE as TIPC_SUB_SERVICE,
307        TIPC_SUBSCR_TIMEOUT as TIPC_SUBSCR_TIMEOUT,
308        TIPC_TOP_SRV as TIPC_TOP_SRV,
309        TIPC_WAIT_FOREVER as TIPC_WAIT_FOREVER,
310        TIPC_WITHDRAWN as TIPC_WITHDRAWN,
311        TIPC_ZONE_SCOPE as TIPC_ZONE_SCOPE,
312    )
313if sys.platform == "linux" and sys.version_info >= (3, 7):
314    from _socket import (
315        CAN_ISOTP as CAN_ISOTP,
316        IOCTL_VM_SOCKETS_GET_LOCAL_CID as IOCTL_VM_SOCKETS_GET_LOCAL_CID,
317        SO_VM_SOCKETS_BUFFER_MAX_SIZE as SO_VM_SOCKETS_BUFFER_MAX_SIZE,
318        SO_VM_SOCKETS_BUFFER_MIN_SIZE as SO_VM_SOCKETS_BUFFER_MIN_SIZE,
319        SO_VM_SOCKETS_BUFFER_SIZE as SO_VM_SOCKETS_BUFFER_SIZE,
320        TCP_NOTSENT_LOWAT as TCP_NOTSENT_LOWAT,
321        VM_SOCKETS_INVALID_VERSION as VM_SOCKETS_INVALID_VERSION,
322        VMADDR_CID_ANY as VMADDR_CID_ANY,
323        VMADDR_CID_HOST as VMADDR_CID_HOST,
324        VMADDR_PORT_ANY as VMADDR_PORT_ANY,
325    )
326if sys.platform == "linux" and sys.version_info >= (3, 8):
327    from _socket import (
328        CAN_BCM_CAN_FD_FRAME as CAN_BCM_CAN_FD_FRAME,
329        CAN_BCM_RX_ANNOUNCE_RESUME as CAN_BCM_RX_ANNOUNCE_RESUME,
330        CAN_BCM_RX_CHECK_DLC as CAN_BCM_RX_CHECK_DLC,
331        CAN_BCM_RX_FILTER_ID as CAN_BCM_RX_FILTER_ID,
332        CAN_BCM_RX_NO_AUTOTIMER as CAN_BCM_RX_NO_AUTOTIMER,
333        CAN_BCM_RX_RTR_FRAME as CAN_BCM_RX_RTR_FRAME,
334        CAN_BCM_SETTIMER as CAN_BCM_SETTIMER,
335        CAN_BCM_STARTTIMER as CAN_BCM_STARTTIMER,
336        CAN_BCM_TX_ANNOUNCE as CAN_BCM_TX_ANNOUNCE,
337        CAN_BCM_TX_COUNTEVT as CAN_BCM_TX_COUNTEVT,
338        CAN_BCM_TX_CP_CAN_ID as CAN_BCM_TX_CP_CAN_ID,
339        CAN_BCM_TX_RESET_MULTI_IDX as CAN_BCM_TX_RESET_MULTI_IDX,
340    )
341if sys.platform == "linux" and sys.version_info >= (3, 9):
342    from _socket import (
343        CAN_J1939 as CAN_J1939,
344        J1939_EE_INFO_NONE as J1939_EE_INFO_NONE,
345        J1939_EE_INFO_TX_ABORT as J1939_EE_INFO_TX_ABORT,
346        J1939_FILTER_MAX as J1939_FILTER_MAX,
347        J1939_IDLE_ADDR as J1939_IDLE_ADDR,
348        J1939_MAX_UNICAST_ADDR as J1939_MAX_UNICAST_ADDR,
349        J1939_NLA_BYTES_ACKED as J1939_NLA_BYTES_ACKED,
350        J1939_NLA_PAD as J1939_NLA_PAD,
351        J1939_NO_ADDR as J1939_NO_ADDR,
352        J1939_NO_NAME as J1939_NO_NAME,
353        J1939_NO_PGN as J1939_NO_PGN,
354        J1939_PGN_ADDRESS_CLAIMED as J1939_PGN_ADDRESS_CLAIMED,
355        J1939_PGN_ADDRESS_COMMANDED as J1939_PGN_ADDRESS_COMMANDED,
356        J1939_PGN_MAX as J1939_PGN_MAX,
357        J1939_PGN_PDU1_MAX as J1939_PGN_PDU1_MAX,
358        J1939_PGN_REQUEST as J1939_PGN_REQUEST,
359        SCM_J1939_DEST_ADDR as SCM_J1939_DEST_ADDR,
360        SCM_J1939_DEST_NAME as SCM_J1939_DEST_NAME,
361        SCM_J1939_ERRQUEUE as SCM_J1939_ERRQUEUE,
362        SCM_J1939_PRIO as SCM_J1939_PRIO,
363        SO_J1939_ERRQUEUE as SO_J1939_ERRQUEUE,
364        SO_J1939_FILTER as SO_J1939_FILTER,
365        SO_J1939_PROMISC as SO_J1939_PROMISC,
366        SO_J1939_SEND_PRIO as SO_J1939_SEND_PRIO,
367    )
368if sys.platform == "win32":
369    from _socket import (
370        RCVALL_IPLEVEL as RCVALL_IPLEVEL,
371        RCVALL_MAX as RCVALL_MAX,
372        RCVALL_OFF as RCVALL_OFF,
373        RCVALL_ON as RCVALL_ON,
374        RCVALL_SOCKETLEVELONLY as RCVALL_SOCKETLEVELONLY,
375        SIO_KEEPALIVE_VALS as SIO_KEEPALIVE_VALS,
376        SIO_LOOPBACK_FAST_PATH as SIO_LOOPBACK_FAST_PATH,
377        SIO_RCVALL as SIO_RCVALL,
378    )
379
380_T = TypeVar("_T")
381
382# Re-exported from errno
383EBADF: int
384EAGAIN: int
385EWOULDBLOCK: int
386
387class AddressFamily(IntEnum):
388    AF_UNIX: int
389    AF_INET: int
390    AF_INET6: int
391    AF_AAL5: int
392    AF_ALG: int
393    AF_APPLETALK: int
394    AF_ASH: int
395    AF_ATMPVC: int
396    AF_ATMSVC: int
397    AF_AX25: int
398    AF_BLUETOOTH: int
399    AF_BRIDGE: int
400    AF_CAN: int
401    AF_DECnet: int
402    AF_ECONET: int
403    AF_IPX: int
404    AF_IRDA: int
405    AF_KEY: int
406    AF_LINK: int
407    AF_LLC: int
408    AF_NETBEUI: int
409    AF_NETLINK: int
410    AF_NETROM: int
411    AF_PACKET: int
412    AF_PPPOX: int
413    AF_QIPCRTR: int
414    AF_RDS: int
415    AF_ROSE: int
416    AF_ROUTE: int
417    AF_SECURITY: int
418    AF_SNA: int
419    AF_SYSTEM: int
420    AF_TIPC: int
421    AF_UNSPEC: int
422    AF_VSOCK: int
423    AF_WANPIPE: int
424    AF_X25: int
425
426AF_UNIX: AddressFamily
427AF_INET: AddressFamily
428AF_INET6: AddressFamily
429AF_AAL5: AddressFamily
430AF_APPLETALK: AddressFamily
431AF_ASH: AddressFamily
432AF_ATMPVC: AddressFamily
433AF_ATMSVC: AddressFamily
434AF_AX25: AddressFamily
435AF_BRIDGE: AddressFamily
436AF_DECnet: AddressFamily
437AF_ECONET: AddressFamily
438AF_IPX: AddressFamily
439AF_IRDA: AddressFamily
440AF_KEY: AddressFamily
441AF_LLC: AddressFamily
442AF_NETBEUI: AddressFamily
443AF_NETROM: AddressFamily
444AF_PPPOX: AddressFamily
445AF_ROSE: AddressFamily
446AF_ROUTE: AddressFamily
447AF_SECURITY: AddressFamily
448AF_SNA: AddressFamily
449AF_SYSTEM: AddressFamily
450AF_UNSPEC: AddressFamily
451AF_WANPIPE: AddressFamily
452AF_X25: AddressFamily
453if sys.platform == "linux":
454    AF_CAN: AddressFamily
455    AF_PACKET: AddressFamily
456    AF_RDS: AddressFamily
457    AF_TIPC: AddressFamily
458    AF_ALG: AddressFamily
459    AF_NETLINK: AddressFamily
460    if sys.version_info >= (3, 7):
461        AF_VSOCK: AddressFamily
462    if sys.version_info >= (3, 8):
463        AF_QIPCRTR: AddressFamily
464AF_LINK: AddressFamily  # availability: BSD, macOS
465if sys.platform != "win32" and sys.platform != "darwin":
466    AF_BLUETOOTH: AddressFamily
467
468class SocketKind(IntEnum):
469    SOCK_STREAM: int
470    SOCK_DGRAM: int
471    SOCK_RAW: int
472    SOCK_RDM: int
473    SOCK_SEQPACKET: int
474    SOCK_CLOEXEC: int
475    SOCK_NONBLOCK: int
476
477SOCK_STREAM: SocketKind
478SOCK_DGRAM: SocketKind
479SOCK_RAW: SocketKind
480SOCK_RDM: SocketKind
481SOCK_SEQPACKET: SocketKind
482if sys.platform == "linux":
483    SOCK_CLOEXEC: SocketKind
484    SOCK_NONBLOCK: SocketKind
485
486class MsgFlag(IntFlag):
487    MSG_CTRUNC: int
488    MSG_DONTROUTE: int
489    MSG_DONTWAIT: int
490    MSG_EOR: int
491    MSG_OOB: int
492    MSG_PEEK: int
493    MSG_TRUNC: int
494    MSG_WAITALL: int
495
496MSG_BCAST: MsgFlag
497MSG_BTAG: MsgFlag
498MSG_CMSG_CLOEXEC: MsgFlag
499MSG_CONFIRM: MsgFlag
500MSG_CTRUNC: MsgFlag
501MSG_DONTROUTE: MsgFlag
502MSG_DONTWAIT: MsgFlag
503MSG_EOF: MsgFlag
504MSG_EOR: MsgFlag
505MSG_ERRQUEUE: MsgFlag
506MSG_ETAG: MsgFlag
507MSG_FASTOPEN: MsgFlag
508MSG_MCAST: MsgFlag
509MSG_MORE: MsgFlag
510MSG_NOSIGNAL: MsgFlag
511MSG_NOTIFICATION: MsgFlag
512MSG_OOB: MsgFlag
513MSG_PEEK: MsgFlag
514MSG_TRUNC: MsgFlag
515MSG_WAITALL: MsgFlag
516
517class AddressInfo(IntFlag):
518    AI_ADDRCONFIG: int
519    AI_ALL: int
520    AI_CANONNAME: int
521    AI_NUMERICHOST: int
522    AI_NUMERICSERV: int
523    AI_PASSIVE: int
524    AI_V4MAPPED: int
525
526AI_ADDRCONFIG: AddressInfo
527AI_ALL: AddressInfo
528AI_CANONNAME: AddressInfo
529AI_DEFAULT: AddressInfo
530AI_MASK: AddressInfo
531AI_NUMERICHOST: AddressInfo
532AI_NUMERICSERV: AddressInfo
533AI_PASSIVE: AddressInfo
534AI_V4MAPPED: AddressInfo
535AI_V4MAPPED_CFG: AddressInfo
536
537if sys.platform == "win32":
538    errorTab: dict[int, str]  # undocumented
539
540class socket(_socket.socket):
541    def __init__(
542        self,
543        family: Union[AddressFamily, int] = ...,
544        type: Union[SocketKind, int] = ...,
545        proto: int = ...,
546        fileno: Optional[int] = ...,
547    ) -> None: ...
548    def __enter__(self: Self) -> Self: ...
549    def __exit__(self, *args: object) -> None: ...
550    def dup(self: _T) -> _T: ...  # noqa: F811
551    def accept(self) -> tuple[socket, _RetAddress]: ...
552    # Note that the makefile's documented windows-specific behavior is not represented
553    # mode strings with duplicates are intentionally excluded
554    @overload
555    def makefile(
556        self,
557        mode: Literal["r", "w", "rw", "wr", ""] = ...,
558        buffering: Optional[int] = ...,
559        *,
560        encoding: Optional[str] = ...,
561        errors: Optional[str] = ...,
562        newline: Optional[str] = ...,
563    ) -> TextIO: ...
564    @overload
565    def makefile(
566        self,
567        mode: Literal["b", "rb", "br", "wb", "bw", "rwb", "rbw", "wrb", "wbr", "brw", "bwr"],
568        buffering: Optional[int] = ...,
569        *,
570        encoding: Optional[str] = ...,
571        errors: Optional[str] = ...,
572        newline: Optional[str] = ...,
573    ) -> BinaryIO: ...
574    def sendfile(self, file: BinaryIO, offset: int = ..., count: Optional[int] = ...) -> int: ...
575    @property
576    def family(self) -> AddressFamily: ...  # type: ignore
577    @property
578    def type(self) -> SocketKind: ...  # type: ignore
579    def get_inheritable(self) -> bool: ...
580    def set_inheritable(self, inheritable: bool) -> None: ...
581
582def fromfd(fd: _FD, family: AddressFamily | int, type: SocketKind | int, proto: int = ...) -> socket: ...
583
584if sys.platform != "win32":
585    if sys.version_info >= (3, 9):
586        # flags and address appear to be unused in send_fds and recv_fds
587        def send_fds(
588            sock: socket, buffers: Iterable[bytes], fds: Union[bytes, Iterable[int]], flags: int = ..., address: None = ...
589        ) -> int: ...
590        def recv_fds(sock: socket, bufsize: int, maxfds: int, flags: int = ...) -> tuple[bytes, list[int], int, Any]: ...
591
592if sys.platform == "win32":
593    def fromshare(info: bytes) -> socket: ...
594
595if sys.platform == "win32":
596    def socketpair(family: int = ..., type: int = ..., proto: int = ...) -> tuple[socket, socket]: ...
597
598else:
599    def socketpair(  # type: ignore
600        family: Union[int, AddressFamily, None] = ..., type: Union[SocketType, int] = ..., proto: int = ...
601    ) -> tuple[socket, socket]: ...
602
603class SocketIO(RawIOBase):
604    def __init__(self, sock: socket, mode: Literal["r", "w", "rw", "rb", "wb", "rwb"]) -> None: ...
605    def readinto(self, b: WriteableBuffer) -> Optional[int]: ...
606    def write(self, b: ReadableBuffer) -> Optional[int]: ...
607    @property
608    def name(self) -> int: ...  # return value is really "int"
609    @property
610    def mode(self) -> Literal["rb", "wb", "rwb"]: ...
611
612def getfqdn(name: str = ...) -> str: ...
613def create_connection(
614    address: tuple[Optional[str], int],
615    timeout: Optional[float] = ...,  # noqa: F811
616    source_address: Optional[tuple[Union[bytearray, bytes, str], int]] = ...,
617) -> socket: ...
618
619if sys.version_info >= (3, 8):
620    def has_dualstack_ipv6() -> bool: ...
621    def create_server(
622        address: _Address, *, family: int = ..., backlog: Optional[int] = ..., reuse_port: bool = ..., dualstack_ipv6: bool = ...
623    ) -> socket: ...
624
625# the 5th tuple item is an address
626def getaddrinfo(
627    host: Optional[Union[bytearray, bytes, str]],
628    port: Union[str, int, None],
629    family: int = ...,
630    type: int = ...,
631    proto: int = ...,
632    flags: int = ...,
633) -> list[tuple[AddressFamily, SocketKind, int, str, Union[tuple[str, int], tuple[str, int, int, int]]]]: ...
634