2 # Ron Murawski <ron@horizonchess.com>
\r
4 # based on: http://docs.python.org/3.2/library/socket.html
\r
5 # see: http://hg.python.org/cpython/file/3d0686d90f55/Lib/socket.py
\r
6 # see: http://nullege.com/codes/search/socket
\r
7 # adapted for Python 2.7 by Michal Pokorny
\r
9 from typing import Any, Iterable, Tuple, List, Optional, Union, overload, TypeVar
\r
11 _WriteBuffer = Union[bytearray, memoryview]
\r
13 # ----- variables and constants -----
\r
15 AF_UNIX: AddressFamily
\r
16 AF_INET: AddressFamily
\r
17 AF_INET6: AddressFamily
\r
18 SOCK_STREAM: SocketKind
\r
19 SOCK_DGRAM: SocketKind
\r
20 SOCK_RAW: SocketKind
\r
21 SOCK_RDM: SocketKind
\r
22 SOCK_SEQPACKET: SocketKind
\r
23 SOCK_CLOEXEC: SocketKind
\r
24 SOCK_NONBLOCK: SocketKind
\r
27 _GLOBAL_DEFAULT_TIMEOUT: Any
\r
31 # These are flags that may exist on Python 3.6. Many don't exist on all platforms.
\r
32 AF_AAL5: AddressFamily
\r
33 AF_APPLETALK: AddressFamily
\r
34 AF_ASH: AddressFamily
\r
35 AF_ATMPVC: AddressFamily
\r
36 AF_ATMSVC: AddressFamily
\r
37 AF_AX25: AddressFamily
\r
38 AF_BLUETOOTH: AddressFamily
\r
39 AF_BRIDGE: AddressFamily
\r
40 AF_CAN: AddressFamily
\r
41 AF_DECnet: AddressFamily
\r
42 AF_ECONET: AddressFamily
\r
43 AF_IPX: AddressFamily
\r
44 AF_IRDA: AddressFamily
\r
45 AF_KEY: AddressFamily
\r
46 AF_LLC: AddressFamily
\r
47 AF_NETBEUI: AddressFamily
\r
48 AF_NETLINK: AddressFamily
\r
49 AF_NETROM: AddressFamily
\r
50 AF_PACKET: AddressFamily
\r
51 AF_PPPOX: AddressFamily
\r
52 AF_RDS: AddressFamily
\r
53 AF_ROSE: AddressFamily
\r
54 AF_ROUTE: AddressFamily
\r
55 AF_SECURITY: AddressFamily
\r
56 AF_SNA: AddressFamily
\r
57 AF_SYSTEM: AddressFamily
\r
58 AF_TIPC: AddressFamily
\r
59 AF_UNSPEC: AddressFamily
\r
60 AF_WANPIPE: AddressFamily
\r
61 AF_X25: AddressFamily
\r
62 AI_ADDRCONFIG: AddressInfo
\r
64 AI_CANONNAME: AddressInfo
\r
65 AI_DEFAULT: AddressInfo
\r
66 AI_MASK: AddressInfo
\r
67 AI_NUMERICHOST: AddressInfo
\r
68 AI_NUMERICSERV: AddressInfo
\r
69 AI_PASSIVE: AddressInfo
\r
70 AI_V4MAPPED: AddressInfo
\r
71 AI_V4MAPPED_CFG: AddressInfo
\r
83 CAN_RAW_ERR_FILTER: int
\r
85 CAN_RAW_LOOPBACK: int
\r
86 CAN_RAW_RECV_OWN_MSGS: int
\r
111 HCI_TIME_STAMP: int
\r
112 INADDR_ALLHOSTS_GROUP: int
\r
114 INADDR_BROADCAST: int
\r
115 INADDR_LOOPBACK: int
\r
116 INADDR_MAX_LOCAL_GROUP: int
\r
118 INADDR_UNSPEC_GROUP: int
\r
119 IPPORT_RESERVED: int
\r
120 IPPORT_USERRESERVED: int
\r
123 IPPROTO_DSTOPTS: int
\r
127 IPPROTO_FRAGMENT: int
\r
131 IPPROTO_HOPOPTS: int
\r
133 IPPROTO_ICMPV6: int
\r
137 IPPROTO_IPCOMP: int
\r
142 IPPROTO_MOBILE: int
\r
148 IPPROTO_ROUTING: int
\r
161 IPV6_JOIN_GROUP: int
\r
162 IPV6_LEAVE_GROUP: int
\r
163 IPV6_MULTICAST_HOPS: int
\r
164 IPV6_MULTICAST_IF: int
\r
165 IPV6_MULTICAST_LOOP: int
\r
169 IPV6_RECVDSTOPTS: int
\r
170 IPV6_RECVHOPLIMIT: int
\r
171 IPV6_RECVHOPOPTS: int
\r
172 IPV6_RECVPATHMTU: int
\r
173 IPV6_RECVPKTINFO: int
\r
174 IPV6_RECVRTHDR: int
\r
175 IPV6_RECVTCLASS: int
\r
177 IPV6_RTHDR_TYPE_0: int
\r
178 IPV6_RTHDRDSTOPTS: int
\r
180 IPV6_UNICAST_HOPS: int
\r
181 IPV6_USE_MIN_MTU: int
\r
183 IP_ADD_MEMBERSHIP: int
\r
184 IP_DEFAULT_MULTICAST_LOOP: int
\r
185 IP_DEFAULT_MULTICAST_TTL: int
\r
186 IP_DROP_MEMBERSHIP: int
\r
188 IP_MAX_MEMBERSHIPS: int
\r
189 IP_MULTICAST_IF: int
\r
190 IP_MULTICAST_LOOP: int
\r
191 IP_MULTICAST_TTL: int
\r
193 IP_RECVDSTADDR: int
\r
195 IP_RECVRETOPTS: int
\r
198 IP_TRANSPARENT: int
\r
201 LOCAL_PEERCRED: int
\r
204 MSG_CMSG_CLOEXEC: MsgFlag
\r
205 MSG_CONFIRM: MsgFlag
\r
206 MSG_CTRUNC: MsgFlag
\r
207 MSG_DONTROUTE: MsgFlag
\r
208 MSG_DONTWAIT: MsgFlag
\r
211 MSG_ERRQUEUE: MsgFlag
\r
213 MSG_FASTOPEN: MsgFlag
\r
216 MSG_NOSIGNAL: MsgFlag
\r
217 MSG_NOTIFICATION: MsgFlag
\r
221 MSG_WAITALL: MsgFlag
\r
223 NETLINK_CRYPTO: int
\r
224 NETLINK_DNRTMSG: int
\r
225 NETLINK_FIREWALL: int
\r
226 NETLINK_IP6_FW: int
\r
228 NETLINK_ROUTE6: int
\r
231 NETLINK_TAPBASE: int
\r
232 NETLINK_TCPDIAG: int
\r
233 NETLINK_USERSOCK: int
\r
241 NI_NUMERICHOST: int
\r
242 NI_NUMERICSERV: int
\r
243 PACKET_BROADCAST: int
\r
244 PACKET_FASTROUTE: int
\r
246 PACKET_LOOPBACK: int
\r
247 PACKET_MULTICAST: int
\r
248 PACKET_OTHERHOST: int
\r
249 PACKET_OUTGOING: int
\r
254 SCM_CREDENTIALS: int
\r
275 SO_BINDTODEVICE: int
\r
280 SO_EXCLUSIVEADDRUSE: int
\r
298 SO_USELOOPBACK: int
\r
299 SYSPROTO_CONTROL: int
\r
301 TCP_DEFER_ACCEPT: int
\r
310 TCP_NOTSENT_LOWAT: int
\r
313 TCP_WINDOW_CLAMP: int
\r
315 TIPC_ADDR_NAME: int
\r
316 TIPC_ADDR_NAMESEQ: int
\r
318 TIPC_CLUSTER_SCOPE: int
\r
319 TIPC_CONN_TIMEOUT: int
\r
320 TIPC_CRITICAL_IMPORTANCE: int
\r
321 TIPC_DEST_DROPPABLE: int
\r
322 TIPC_HIGH_IMPORTANCE: int
\r
323 TIPC_IMPORTANCE: int
\r
324 TIPC_LOW_IMPORTANCE: int
\r
325 TIPC_MEDIUM_IMPORTANCE: int
\r
326 TIPC_NODE_SCOPE: int
\r
327 TIPC_PUBLISHED: int
\r
328 TIPC_SRC_DROPPABLE: int
\r
329 TIPC_SUB_CANCEL: int
\r
330 TIPC_SUB_PORTS: int
\r
331 TIPC_SUB_SERVICE: int
\r
332 TIPC_SUBSCR_TIMEOUT: int
\r
334 TIPC_WAIT_FOREVER: int
\r
335 TIPC_WITHDRAWN: int
\r
336 TIPC_ZONE_SCOPE: int
\r
338 if sys.version_info >= (3, 3):
\r
339 RDS_CANCEL_SENT_TO: int
\r
340 RDS_CMSG_RDMA_ARGS: int
\r
341 RDS_CMSG_RDMA_DEST: int
\r
342 RDS_CMSG_RDMA_MAP: int
\r
343 RDS_CMSG_RDMA_STATUS: int
\r
344 RDS_CMSG_RDMA_UPDATE: int
\r
345 RDS_CONG_MONITOR: int
\r
348 RDS_GET_MR_FOR_DEST: int
\r
349 RDS_RDMA_DONTWAIT: int
\r
350 RDS_RDMA_FENCE: int
\r
351 RDS_RDMA_INVALIDATE: int
\r
352 RDS_RDMA_NOTIFY_ME: int
\r
353 RDS_RDMA_READWRITE: int
\r
354 RDS_RDMA_SILENT: int
\r
355 RDS_RDMA_USE_ONCE: int
\r
358 if sys.version_info >= (3, 4):
\r
360 CAN_BCM_TX_SETUP: int
\r
361 CAN_BCM_TX_DELETE: int
\r
362 CAN_BCM_TX_READ: int
\r
363 CAN_BCM_TX_SEND: int
\r
364 CAN_BCM_RX_SETUP: int
\r
365 CAN_BCM_RX_DELETE: int
\r
366 CAN_BCM_RX_READ: int
\r
367 CAN_BCM_TX_STATUS: int
\r
368 CAN_BCM_TX_EXPIRED: int
\r
369 CAN_BCM_RX_STATUS: int
\r
370 CAN_BCM_RX_TIMEOUT: int
\r
371 CAN_BCM_RX_CHANGED: int
\r
372 AF_LINK: AddressFamily
\r
374 if sys.version_info >= (3, 5):
\r
375 CAN_RAW_FD_FRAMES: int
\r
377 if sys.version_info >= (3, 6):
\r
382 TCP_USER_TIMEOUT: int
\r
383 TCP_CONGESTION: int
\r
384 AF_ALG: AddressFamily
\r
389 ALG_SET_AEAD_ASSOCLEN: int
\r
390 ALG_SET_AEAD_AUTHSIZE: int
\r
391 ALG_SET_PUBKEY: int
\r
392 ALG_OP_DECRYPT: int
\r
393 ALG_OP_ENCRYPT: int
\r
397 if sys.platform == 'win32':
\r
399 SIO_KEEPALIVE_VALS: int
\r
400 RCVALL_IPLEVEL: int
\r
404 RCVALL_SOCKETLEVELONLY: int
\r
406 if sys.version_info >= (3, 6):
\r
407 SIO_LOOPBACK_FAST_PATH: int
\r
409 # enum versions of above flags py 3.4+
\r
410 if sys.version_info >= (3, 4):
\r
411 from enum import IntEnum
\r
413 class AddressFamily(IntEnum):
\r
445 class SocketKind(IntEnum):
\r
450 SOCK_SEQPACKET = ...
\r
452 SOCK_NONBLOCK = ...
\r
454 AddressFamily = int
\r
457 if sys.version_info >= (3, 6):
\r
458 from enum import IntFlag
\r
460 class AddressInfo(IntFlag):
\r
461 AI_ADDRCONFIG = ...
\r
464 AI_NUMERICHOST = ...
\r
465 AI_NUMERICSERV = ...
\r
469 class MsgFlag(IntFlag):
\r
471 MSG_DONTROUTE = ...
\r
483 # ----- exceptions -----
\r
484 class error(IOError):
\r
487 class herror(error):
\r
488 def __init__(self, herror: int, string: str) -> None: ...
\r
490 class gaierror(error):
\r
491 def __init__(self, error: int, string: str) -> None: ...
\r
493 class timeout(error):
\r
497 # Addresses can be either tuples of varying lengths (AF_INET, AF_INET6,
\r
498 # AF_NETLINK, AF_TIPC) or strings (AF_UNIX).
\r
500 # TODO AF_PACKET and AF_BLUETOOTH address objects
\r
502 _CMSG = Tuple[int, int, bytes]
\r
503 _SelfT = TypeVar('_SelfT', bound=socket)
\r
505 # ----- classes -----
\r
511 if sys.version_info < (3,):
\r
512 def __init__(self, family: int = ..., type: int = ...,
\r
513 proto: int = ...) -> None: ...
\r
515 def __init__(self, family: int = ..., type: int = ...,
\r
516 proto: int = ..., fileno: Optional[int] = ...) -> None: ...
\r
518 if sys.version_info >= (3, 2):
\r
519 def __enter__(self: _SelfT) -> _SelfT: ...
\r
520 def __exit__(self, *args: Any) -> None: ...
\r
523 # second tuple item is an address
\r
524 def accept(self) -> Tuple['socket', Any]: ...
\r
525 def bind(self, address: Union[tuple, str, bytes]) -> None: ...
\r
526 def close(self) -> None: ...
\r
527 def connect(self, address: Union[tuple, str, bytes]) -> None: ...
\r
528 def connect_ex(self, address: Union[tuple, str, bytes]) -> int: ...
\r
529 def detach(self) -> int: ...
\r
530 def fileno(self) -> int: ...
\r
532 # return value is an address
\r
533 def getpeername(self) -> Any: ...
\r
534 def getsockname(self) -> Any: ...
\r
537 def getsockopt(self, level: int, optname: int) -> int: ...
\r
539 def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ...
\r
541 def gettimeout(self) -> float: ...
\r
542 def ioctl(self, control: object,
\r
543 option: Tuple[int, int, int]) -> None: ...
\r
544 def listen(self, backlog: int) -> None: ...
\r
545 # TODO the return value may be BinaryIO or TextIO, depending on mode
\r
546 def makefile(self, mode: str = ..., buffering: int = ...,
\r
547 encoding: str = ..., errors: str = ...,
\r
548 newline: str = ...) -> Any:
\r
550 def recv(self, bufsize: int, flags: int = ...) -> bytes: ...
\r
552 # return type is an address
\r
553 def recvfrom(self, bufsize: int, flags: int = ...) -> Any: ...
\r
554 def recvfrom_into(self, buffer: _WriteBuffer, nbytes: int,
\r
555 flags: int = ...) -> Any: ...
\r
556 def recv_into(self, buffer: _WriteBuffer, nbytes: int,
\r
557 flags: int = ...) -> Any: ...
\r
558 def send(self, data: bytes, flags: int = ...) -> int: ...
\r
559 def sendall(self, data: bytes, flags: int =...) -> None:
\r
560 ... # return type: None on success
\r
562 def sendto(self, data: bytes, address: Union[tuple, str]) -> int: ...
\r
564 def sendto(self, data: bytes, flags: int, address: Union[tuple, str]) -> int: ...
\r
565 def setblocking(self, flag: bool) -> None: ...
\r
566 def settimeout(self, value: Optional[float]) -> None: ...
\r
567 def setsockopt(self, level: int, optname: int, value: Union[int, bytes]) -> None: ...
\r
568 def shutdown(self, how: int) -> None: ...
\r
570 if sys.version_info >= (3, 3):
\r
571 def recvmsg(self, __bufsize: int, __ancbufsize: int = ...,
\r
572 __flags: int = ...) -> Tuple[bytes, List[_CMSG], int, Any]: ...
\r
573 def recvmsg_into(self, __buffers: Iterable[_WriteBuffer], __ancbufsize: int = ...,
\r
574 __flags: int = ...) -> Tuple[int, List[_CMSG], int, Any]: ...
\r
575 def sendmsg(self, __buffers: Iterable[bytes], __ancdata: Iterable[_CMSG] = ...,
\r
576 __flags: int = ..., __address: Any = ...) -> int: ...
\r
579 # ----- functions -----
\r
580 def create_connection(address: Tuple[Optional[str], int],
\r
581 timeout: float = ...,
\r
582 source_address: Tuple[str, int] = ...) -> socket: ...
\r
584 # the 5th tuple item is an address
\r
585 # TODO the "Tuple[Any, ...]" should be "Union[Tuple[str, int], Tuple[str, int, int, int]]" but that triggers
\r
586 # https://github.com/python/mypy/issues/2509
\r
588 host: Optional[str], port: Union[str, int, None], family: int = ...,
\r
589 socktype: int = ..., proto: int = ...,
\r
590 flags: int = ...) -> List[Tuple[int, int, int, str, Tuple[Any, ...]]]:
\r
593 def getfqdn(name: str = ...) -> str: ...
\r
594 def gethostbyname(hostname: str) -> str: ...
\r
595 def gethostbyname_ex(hostname: str) -> Tuple[str, List[str], List[str]]: ...
\r
596 def gethostname() -> str: ...
\r
597 def gethostbyaddr(ip_address: str) -> Tuple[str, List[str], List[str]]: ...
\r
598 def getnameinfo(sockaddr: tuple, flags: int) -> Tuple[str, int]: ...
\r
599 def getprotobyname(protocolname: str) -> int: ...
\r
600 def getservbyname(servicename: str, protocolname: str = ...) -> int: ...
\r
601 def getservbyport(port: int, protocolname: str = ...) -> str: ...
\r
602 def socketpair(family: int = ...,
\r
604 proto: int = ...) -> Tuple[socket, socket]: ...
\r
605 def fromfd(fd: int, family: int, type: int, proto: int = ...) -> socket: ...
\r
606 def ntohl(x: int) -> int: ... # param & ret val are 32-bit ints
\r
607 def ntohs(x: int) -> int: ... # param & ret val are 16-bit ints
\r
608 def htonl(x: int) -> int: ... # param & ret val are 32-bit ints
\r
609 def htons(x: int) -> int: ... # param & ret val are 16-bit ints
\r
610 def inet_aton(ip_string: str) -> bytes: ... # ret val 4 bytes in length
\r
611 def inet_ntoa(packed_ip: bytes) -> str: ...
\r
612 def inet_pton(address_family: int, ip_string: str) -> bytes: ...
\r
613 def inet_ntop(address_family: int, packed_ip: bytes) -> str: ...
\r
614 def getdefaulttimeout() -> Optional[float]: ...
\r
615 def setdefaulttimeout(timeout: Optional[float]) -> None: ...
\r
617 if sys.version_info >= (3, 3):
\r
618 def CMSG_LEN(length: int) -> int: ...
\r
619 def CMSG_SPACE(length: int) -> int: ...
\r
620 def sethostname(name: str) -> None: ...
\r
621 def if_nameindex() -> List[Tuple[int, str]]: ...
\r
622 def if_nametoindex(name: str) -> int: ...
\r
623 def if_indextoname(index: int) -> str: ...
\r