Lines Matching +full:getsockopt +full:- +full:timeouts
9 - Only AF_INET, AF_INET6 and AF_UNIX address families are supported in a
12 - No read/write operations (use sendall/recv or makefile instead).
13 - Additional restrictions apply on some non-Unix platforms (compensated
18 - socket.error: exception raised for socket specific errors, alias for OSError
19 - socket.gaierror: exception raised for getaddrinfo/getnameinfo errors,
21 - socket.herror: exception raised for gethostby* errors,
23 - socket.gethostbyname(hostname) --> host IP address (string: 'dd.dd.dd.dd')
24 - socket.gethostbyaddr(IP address) --> (hostname, [alias, ...], [IP addr, ...])
25 - socket.gethostname() --> host name (string: 'spam' or 'spam.domain.com')
26 - socket.getprotobyname(protocolname) --> protocol number
27 - socket.getservbyname(servicename[, protocolname]) --> port number
28 - socket.getservbyport(portnumber[, protocolname]) --> service name
29 - socket.socket([family[, type [, proto, fileno]]]) --> new socket object
30 (fileno specifies a pre-existing socket file descriptor)
31 - socket.socketpair([family[, type [, proto]]]) --> (socket, socket)
32 - socket.ntohs(16 bit value) --> new int object
33 - socket.ntohl(32 bit value) --> new int object
34 - socket.htons(16 bit value) --> new int object
35 - socket.htonl(32 bit value) --> new int object
36 - socket.getaddrinfo(host, port [, family, type, proto, flags])
37 --> List of (family, type, proto, canonname, sockaddr)
38 - socket.getnameinfo(sockaddr, flags) --> (host, port)
39 - socket.AF_INET, socket.SOCK_STREAM, etc.: constants from <socket.h>
40 - socket.has_ipv6: boolean value indicating if IPv6 is supported
41 - socket.inet_aton(IP address) -> 32-bit packed IP representation
42 - socket.inet_ntoa(packed IP) -> IP address string
43 - socket.getdefaulttimeout() -> None | float
44 - socket.setdefaulttimeout(None | float)
45 - socket.if_nameindex() -> list of tuples (if_index, if_name)
46 - socket.if_nametoindex(name) -> corresponding interface index
47 - socket.if_indextoname(index) -> corresponding interface name
48 - an internet socket address is a pair (hostname, port)
51 - where a hostname is returned, the dd.dd.dd.dd notation is used
52 - a UNIX domain socket address is a string specifying the pathname
53 - an AF_PACKET socket address is a tuple containing a string
57 specify packet-type and ha-type/addr.
58 - an AF_QIPCRTR socket address is a (node, port) tuple where the
59 node and port are non-negative integers.
60 - an AF_TIPC socket address is expressed as
82 - names starting with sock_ are socket object methods
83 - names starting with socket_ are module-level functions
84 - names starting with PySocket are exported through socketmodule.h
119 "socket(family=AF_INET, type=SOCK_STREAM, proto=0) -> socket object\n\
120 socket(family=-1, type=-1, proto=-1, fileno=None) -> socket object\n\
127 The socket is created as non-inheritable.\n\
129 When a fileno is passed in, family, type and proto are auto-detected,\n\
136 _accept() -- accept connection, returning new socket fd and client address\n\
137 bind(addr) -- bind the socket to a local address\n\
138 close() -- close the socket\n\
139 connect(addr) -- connect the socket to a remote address\n\
140 connect_ex(addr) -- connect, return an error code instead of an exception\n\
141 dup() -- return a new socket fd duplicated from fileno()\n\
142 fileno() -- return underlying file descriptor\n\
143 getpeername() -- return remote address [*]\n\
144 getsockname() -- return local address\n\
145 getsockopt(level, optname[, buflen]) -- get socket options\n\
146 gettimeout() -- return timeout or None\n\
147 listen([n]) -- start listening for incoming connections\n\
148 recv(buflen[, flags]) -- receive data\n\
149 recv_into(buffer[, nbytes[, flags]]) -- receive data (into a buffer)\n\
150 recvfrom(buflen[, flags]) -- receive data and sender\'s address\n\
152 -- receive data and sender\'s address (into a buffer)\n\
153 sendall(data[, flags]) -- send all data\n\
154 send(data[, flags]) -- send data, may not send all of it\n\
155 sendto(data[, flags], addr) -- send data to a given address\n\
156 setblocking(bool) -- set or clear the blocking I/O flag\n\
157 getblocking() -- return True if socket is blocking, False if non-blocking\n\
158 setsockopt(level, optname, value[, optlen]) -- set socket options\n\
159 settimeout(None | float) -- set or clear the timeout\n\
160 shutdown(how) -- shut down traffic in one or both directions\n\
164 /* XXX This is a terrible mess of platform-dependent preprocessor hacks.
167 /* Hacks for gethostbyname_r(). On some non-Linux platforms, the configure
258 /* Non-MS WINDOWS includes */
315 /* remove some flags on older version Windows during run-time.
316 https://msdn.microsoft.com/en-us/library/windows/desktop/ms738596.aspx */
348 return -1; in remove_unusable_flags()
376 return -1; in remove_unusable_flags()
381 return -1; in remove_unusable_flags()
471 #define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
472 #define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
473 #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
481 #define _BT_L2_MEMB(sa, memb) ((sa)->bt_##memb)
482 #define _BT_RC_MEMB(sa, memb) ((sa)->bt_##memb)
483 #define _BT_HCI_MEMB(sa, memb) ((sa)->bt_##memb)
484 #define _BT_SCO_MEMB(sa, memb) ((sa)->bt_##memb)
486 #define _BT_L2_MEMB(sa, memb) ((sa)->l2_##memb)
487 #define _BT_RC_MEMB(sa, memb) ((sa)->rc_##memb)
488 #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
489 #define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb)
499 #define _BT_RC_MEMB(sa, memb) ((sa)->memb)
503 #define SAS2SA(x) (&((x)->sa))
516 #define INVALID_SOCKET (-1)
520 #define INADDR_NONE (-1)
547 (2**31)-1 and recommends against storing larger values, but
549 safe side we use the smaller of (2**31)-1 and INT_MAX. */
563 #define IS_SELECTABLE(s) (_PyIsSelectable_fd((s)->sock_fd) || (s)->sock_timeout <= 0)
604 static int support_wsa_no_inherit = -1;
678 int result = -1; in internal_setblocking()
691 if (ioctl(s->sock_fd, FIONBIO, (unsigned int *)&block) == -1) in internal_setblocking()
694 delay_flag = fcntl(s->sock_fd, F_GETFL, 0); in internal_setblocking()
695 if (delay_flag == -1) in internal_setblocking()
702 if (fcntl(s->sock_fd, F_SETFL, new_delay_flag) == -1) in internal_setblocking()
707 if (ioctlsocket(s->sock_fd, FIONBIO, &arg) != 0) in internal_setblocking()
747 if (s->sock_fd == INVALID_SOCKET) in internal_select()
753 pollfd.fd = s->sock_fd; in internal_select()
763 /* s->sock_timeout is in seconds, timeout in ms */ in internal_select()
767 /* On some OSes, typically BSD-based ones, the timeout parameter of the in internal_select()
769 or -1. See issue 37811. */ in internal_select()
774 ms = -1; in internal_select()
790 FD_SET(s->sock_fd, &fds); in internal_select()
797 FD_SET(s->sock_fd, &efds); in internal_select()
803 n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), in internal_select()
806 n = select(Py_SAFE_DOWNCAST(s->sock_fd+1, SOCKET_T, int), in internal_select()
812 return -1; in internal_select()
820 On error, raise an exception and return -1 if err is set, or fill err and
821 return -1 otherwise. If a signal was received and the signal handler raised
822 an exception, return -1, and set err to -1 if err is set.
884 if (res == -1) { in sock_call_ex()
892 *err = -1; in sock_call_ex()
893 return -1; in sock_call_ex()
901 s->errorhandler(); in sock_call_ex()
902 return -1; in sock_call_ex()
910 return -1; in sock_call_ex()
939 *err = -1; in sock_call_ex()
940 return -1; in sock_call_ex()
946 if (s->sock_timeout > 0 in sock_call_ex()
960 s->errorhandler(); in sock_call_ex()
962 return -1; in sock_call_ex()
972 return sock_call_ex(s, writing, func, data, 0, NULL, s->sock_timeout); in sock_call()
979 static _PyTime_t defaulttimeout = _PYTIME_FROMSECONDS(-1);
985 s->sock_fd = fd; in init_sockobject()
986 s->sock_family = family; in init_sockobject()
988 s->sock_type = type; in init_sockobject()
997 s->sock_type = s->sock_type & ~SOCK_NONBLOCK; in init_sockobject()
1000 s->sock_type = s->sock_type & ~SOCK_CLOEXEC; in init_sockobject()
1003 s->sock_proto = proto; in init_sockobject()
1005 s->errorhandler = &set_error; in init_sockobject()
1008 s->sock_timeout = 0; in init_sockobject()
1012 s->sock_timeout = defaulttimeout; in init_sockobject()
1014 if (internal_setblocking(s, 0) == -1) { in init_sockobject()
1015 return -1; in init_sockobject()
1037 if (init_sockobject(s, fd, family, type, proto) == -1) { in new_sockobject()
1076 /* We assume that those thread-unsafe getaddrinfo() versions in setipaddr()
1081 res = NULL; // no-op, remind us that it is invalid; gh-100795 in setipaddr()
1083 return -1; in setipaddr()
1085 switch (res->ai_family) { in setipaddr()
1098 return -1; in setipaddr()
1100 if (res->ai_next) { in setipaddr()
1104 return -1; in setipaddr()
1106 if (res->ai_addrlen < addr_ret_size) in setipaddr()
1107 addr_ret_size = res->ai_addrlen; in setipaddr()
1108 memcpy(addr_ret, res->ai_addr, addr_ret_size); in setipaddr()
1112 /* special-case broadcast - inet_addr() below can return INADDR_NONE for in setipaddr()
1120 return -1; in setipaddr()
1124 sin->sin_family = AF_INET; in setipaddr()
1126 sin->sin_len = sizeof(*sin); in setipaddr()
1128 sin->sin_addr.s_addr = INADDR_BROADCAST; in setipaddr()
1129 return sizeof(sin->sin_addr); in setipaddr()
1138 if (inet_pton(AF_INET, name, &sin->sin_addr) > 0) { in setipaddr()
1139 sin->sin_family = AF_INET; in setipaddr()
1141 sin->sin_len = sizeof(*sin); in setipaddr()
1147 /* check for an IPv6 address - if the address contains a scope ID, we in setipaddr()
1153 if (inet_pton(AF_INET6, name, &sin->sin6_addr) > 0) { in setipaddr()
1154 sin->sin6_family = AF_INET6; in setipaddr()
1156 sin->sin6_len = sizeof(*sin); in setipaddr()
1167 if ((sin->sin_addr.s_addr = inet_addr(name)) != INADDR_NONE) { in setipaddr()
1168 sin->sin_family = AF_INET; in setipaddr()
1170 sin->sin_len = sizeof(*sin); in setipaddr()
1184 /* On Tru64 V5.1, numeric-to-addr conversion fails in setipaddr()
1192 res = NULL; // no-op, remind us that it is invalid; gh-100795 in setipaddr()
1194 return -1; in setipaddr()
1196 if (res->ai_addrlen < addr_ret_size) in setipaddr()
1197 addr_ret_size = res->ai_addrlen; in setipaddr()
1198 memcpy((char *) addr_ret, res->ai_addr, addr_ret_size); in setipaddr()
1200 switch (addr_ret->sa_family) { in setipaddr()
1209 return -1; in setipaddr()
1220 if (inet_ntop(AF_INET, &addr->sin_addr, buf, sizeof(buf)) == NULL) { in make_ipv4_addr()
1234 if (inet_ntop(AF_INET6, &addr->sin6_addr, buf, sizeof(buf)) == NULL) { in make_ipv6_addr()
1244 address. Returns the length (6), or raises an exception and returns -1 if
1266 bdaddr->b[0] = b0; in setbdaddr()
1267 bdaddr->b[1] = b1; in setbdaddr()
1268 bdaddr->b[2] = b2; in setbdaddr()
1269 bdaddr->b[3] = b3; in setbdaddr()
1270 bdaddr->b[4] = b4; in setbdaddr()
1271 bdaddr->b[5] = b5; in setbdaddr()
1277 return -1; in setbdaddr()
1303 bdaddr->b[5], bdaddr->b[4], bdaddr->b[3], in makebdaddr()
1304 bdaddr->b[2], bdaddr->b[1], bdaddr->b[0]); in makebdaddr()
1322 /* No address -- may be recvfrom() from known socket */ in makesockaddr()
1326 switch (addr->sa_family) { in makesockaddr()
1334 ret = Py_BuildValue("Oi", addrobj, ntohs(a->sin_port)); in makesockaddr()
1345 size_t linuxaddrlen = addrlen - offsetof(struct sockaddr_un, sun_path); in makesockaddr()
1346 if (linuxaddrlen > 0 && a->sun_path[0] == 0) { /* Linux abstract namespace */ in makesockaddr()
1347 return PyBytes_FromStringAndSize(a->sun_path, linuxaddrlen); in makesockaddr()
1352 /* regular NULL-terminated string */ in makesockaddr()
1353 return PyUnicode_DecodeFSDefault(a->sun_path); in makesockaddr()
1362 return Py_BuildValue("II", a->nl_pid, a->nl_groups); in makesockaddr()
1370 return Py_BuildValue("II", a->sq_node, a->sq_port); in makesockaddr()
1378 return Py_BuildValue("II", a->svm_cid, a->svm_port); in makesockaddr()
1391 ntohs(a->sin6_port), in makesockaddr()
1392 ntohl(a->sin6_flowinfo), in makesockaddr()
1393 a->sin6_scope_id); in makesockaddr()
1471 if (a->sll_ifindex) { in makesockaddr()
1472 ifr.ifr_ifindex = a->sll_ifindex; in makesockaddr()
1478 ntohs(a->sll_protocol), in makesockaddr()
1479 a->sll_pkttype, in makesockaddr()
1480 a->sll_hatype, in makesockaddr()
1481 a->sll_addr, in makesockaddr()
1482 (Py_ssize_t)a->sll_halen); in makesockaddr()
1490 if (a->addrtype == TIPC_ADDR_NAMESEQ) { in makesockaddr()
1492 a->addrtype, in makesockaddr()
1493 a->addr.nameseq.type, in makesockaddr()
1494 a->addr.nameseq.lower, in makesockaddr()
1495 a->addr.nameseq.upper, in makesockaddr()
1496 a->scope); in makesockaddr()
1497 } else if (a->addrtype == TIPC_ADDR_NAME) { in makesockaddr()
1499 a->addrtype, in makesockaddr()
1500 a->addr.name.name.type, in makesockaddr()
1501 a->addr.name.name.instance, in makesockaddr()
1502 a->addr.name.name.instance, in makesockaddr()
1503 a->scope); in makesockaddr()
1504 } else if (a->addrtype == TIPC_ADDR_ID) { in makesockaddr()
1506 a->addrtype, in makesockaddr()
1507 a->addr.id.node, in makesockaddr()
1508 a->addr.id.ref, in makesockaddr()
1510 a->scope); in makesockaddr()
1526 if (a->can_ifindex) { in makesockaddr()
1527 ifr.ifr_ifindex = a->can_ifindex; in makesockaddr()
1538 a->can_addr.tp.rx_id, in makesockaddr()
1539 a->can_addr.tp.tx_id); in makesockaddr()
1547 (unsigned long long)a->can_addr.j1939.name, in makesockaddr()
1548 (unsigned int)a->can_addr.j1939.pgn, in makesockaddr()
1549 a->can_addr.j1939.addr); in makesockaddr()
1568 return Py_BuildValue("(II)", a->sc_id, a->sc_unit); in makesockaddr()
1583 a->salg_type, in makesockaddr()
1584 strnlen((const char*)a->salg_type, in makesockaddr()
1585 sizeof(a->salg_type)), in makesockaddr()
1586 a->salg_name, in makesockaddr()
1587 strnlen((const char*)a->salg_name, in makesockaddr()
1588 sizeof(a->salg_name)), in makesockaddr()
1589 a->salg_feat, in makesockaddr()
1590 a->salg_mask); in makesockaddr()
1598 exception -- return it as an (int, bytes) tuple. */ in makesockaddr()
1600 addr->sa_family, in makesockaddr()
1601 addr->sa_data, in makesockaddr()
1602 sizeof(addr->sa_data)); in makesockaddr()
1608 /* Helper for getsockaddrarg: bypass IDNA for ASCII-only host names
1618 Py_CLEAR(data->obj); in idna_cleanup()
1630 data->obj = NULL; in idna_converter()
1631 len = -1; in idna_converter()
1633 data->buf = PyBytes_AsString(obj); in idna_converter()
1637 data->buf = PyByteArray_AsString(obj); in idna_converter()
1641 if (PyUnicode_READY(obj) == -1) { in idna_converter()
1645 data->buf = PyUnicode_DATA(obj); in idna_converter()
1655 data->obj = obj2; in idna_converter()
1656 data->buf = PyBytes_AS_STRING(obj2); in idna_converter()
1662 Py_TYPE(obj)->tp_name); in idna_converter()
1665 if (strlen(data->buf) != len) { in idna_converter()
1666 Py_CLEAR(data->obj); in idna_converter()
1682 switch (s->sock_family) { in getsockaddrarg()
1704 struct sockaddr_un* addr = &addrbuf->un; in getsockaddrarg()
1708 - Empty address auto-binding to an abstract address in getsockaddrarg()
1709 - Address that starts with null byte */ in getsockaddrarg()
1710 if ((size_t)path.len > sizeof addr->sun_path) { in getsockaddrarg()
1721 /* regular NULL-terminated string */ in getsockaddrarg()
1722 if ((size_t)path.len >= sizeof addr->sun_path) { in getsockaddrarg()
1727 addr->sun_path[path.len] = 0; in getsockaddrarg()
1732 addr->sun_family = s->sock_family; in getsockaddrarg()
1733 memcpy(addr->sun_path, path.buf, path.len); in getsockaddrarg()
1747 struct sockaddr_nl* addr = &addrbuf->nl; in getsockaddrarg()
1752 caller, Py_TYPE(args)->tp_name); in getsockaddrarg()
1762 addr->nl_family = AF_NETLINK; in getsockaddrarg()
1763 addr->nl_pid = pid; in getsockaddrarg()
1764 addr->nl_groups = groups; in getsockaddrarg()
1774 struct sockaddr_qrtr* addr = &addrbuf->sq; in getsockaddrarg()
1780 Py_TYPE(args)->tp_name); in getsockaddrarg()
1785 addr->sq_family = AF_QIPCRTR; in getsockaddrarg()
1786 addr->sq_node = node; in getsockaddrarg()
1787 addr->sq_port = port; in getsockaddrarg()
1796 struct sockaddr_vm* addr = &addrbuf->vm; in getsockaddrarg()
1804 Py_TYPE(args)->tp_name); in getsockaddrarg()
1809 addr->svm_family = s->sock_family; in getsockaddrarg()
1810 addr->svm_port = port; in getsockaddrarg()
1811 addr->svm_cid = cid; in getsockaddrarg()
1820 /* RDS sockets use sockaddr_in: fall-through */ in getsockaddrarg()
1831 caller, Py_TYPE(args)->tp_name); in getsockaddrarg()
1842 "%s(): port must be 0-65535.", caller); in getsockaddrarg()
1846 struct sockaddr_in* addr = &addrbuf->in; in getsockaddrarg()
1855 "%s(): port must be 0-65535.", caller); in getsockaddrarg()
1858 addr->sin_family = AF_INET; in getsockaddrarg()
1859 addr->sin_port = htons((short)port); in getsockaddrarg()
1875 caller, Py_TYPE(args)->tp_name); in getsockaddrarg()
1887 "%s(): port must be 0-65535.", caller); in getsockaddrarg()
1891 struct sockaddr_in6* addr = &addrbuf->in6; in getsockaddrarg()
1900 "%s(): port must be 0-65535.", caller); in getsockaddrarg()
1906 "%s(): flowinfo must be 0-1048575.", caller); in getsockaddrarg()
1909 addr->sin6_family = s->sock_family; in getsockaddrarg()
1910 addr->sin6_port = htons((short)port); in getsockaddrarg()
1911 addr->sin6_flowinfo = htonl(flowinfo); in getsockaddrarg()
1912 addr->sin6_scope_id = scope_id; in getsockaddrarg()
1921 switch (s->sock_proto) { in getsockaddrarg()
1927 struct sockaddr_l2 *addr = &addrbuf->bt_l2; in getsockaddrarg()
1946 struct sockaddr_rc *addr = &addrbuf->bt_rc; in getsockaddrarg()
1963 struct sockaddr_hci *addr = &addrbuf->bt_hci; in getsockaddrarg()
1991 struct sockaddr_sco *addr = &addrbuf->bt_sco; in getsockaddrarg()
2029 caller, Py_TYPE(args)->tp_name); in getsockaddrarg()
2034 of bpo-25041. */ in getsockaddrarg()
2049 ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0'; in getsockaddrarg()
2050 if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { in getsockaddrarg()
2051 s->errorhandler(); in getsockaddrarg()
2064 "%s(): proto must be 0-65535.", caller); in getsockaddrarg()
2068 struct sockaddr_ll* addr = &addrbuf->ll; in getsockaddrarg()
2069 addr->sll_family = AF_PACKET; in getsockaddrarg()
2070 addr->sll_protocol = htons((short)protoNumber); in getsockaddrarg()
2071 addr->sll_ifindex = ifr.ifr_ifindex; in getsockaddrarg()
2072 addr->sll_pkttype = pkttype; in getsockaddrarg()
2073 addr->sll_hatype = hatype; in getsockaddrarg()
2075 memcpy(&addr->sll_addr, haddr.buf, haddr.len); in getsockaddrarg()
2076 addr->sll_halen = haddr.len; in getsockaddrarg()
2079 addr->sll_halen = 0; in getsockaddrarg()
2096 caller, Py_TYPE(args)->tp_name); in getsockaddrarg()
2108 struct sockaddr_tipc *addr = &addrbuf->tipc; in getsockaddrarg()
2111 addr->family = AF_TIPC; in getsockaddrarg()
2112 addr->scope = scope; in getsockaddrarg()
2113 addr->addrtype = atype; in getsockaddrarg()
2116 addr->addr.nameseq.type = v1; in getsockaddrarg()
2117 addr->addr.nameseq.lower = v2; in getsockaddrarg()
2118 addr->addr.nameseq.upper = v3; in getsockaddrarg()
2120 addr->addr.name.name.type = v1; in getsockaddrarg()
2121 addr->addr.name.name.instance = v2; in getsockaddrarg()
2123 addr->addr.id.node = v1; in getsockaddrarg()
2124 addr->addr.id.ref = v2; in getsockaddrarg()
2139 switch (s->sock_proto) { in getsockaddrarg()
2142 /* fall-through */ in getsockaddrarg()
2152 struct sockaddr_can *addr = &addrbuf->can; in getsockaddrarg()
2157 caller, Py_TYPE(args)->tp_name); in getsockaddrarg()
2174 ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0'; in getsockaddrarg()
2175 if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { in getsockaddrarg()
2176 s->errorhandler(); in getsockaddrarg()
2187 addr->can_family = AF_CAN; in getsockaddrarg()
2188 addr->can_ifindex = ifr.ifr_ifindex; in getsockaddrarg()
2204 struct sockaddr_can *addr = &addrbuf->can; in getsockaddrarg()
2218 ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0'; in getsockaddrarg()
2219 if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { in getsockaddrarg()
2220 s->errorhandler(); in getsockaddrarg()
2231 addr->can_family = AF_CAN; in getsockaddrarg()
2232 addr->can_ifindex = ifr.ifr_ifindex; in getsockaddrarg()
2233 addr->can_addr.tp.rx_id = rx_id; in getsockaddrarg()
2234 addr->can_addr.tp.tx_id = tx_id; in getsockaddrarg()
2251 struct sockaddr_can *addr = &addrbuf->can; in getsockaddrarg()
2266 ifr.ifr_name[(sizeof(ifr.ifr_name))-1] = '\0'; in getsockaddrarg()
2267 if (ioctl(s->sock_fd, SIOCGIFINDEX, &ifr) < 0) { in getsockaddrarg()
2268 s->errorhandler(); in getsockaddrarg()
2279 addr->can_family = AF_CAN; in getsockaddrarg()
2280 addr->can_ifindex = ifr.ifr_ifindex; in getsockaddrarg()
2281 addr->can_addr.j1939.name = (uint64_t)j1939_name; in getsockaddrarg()
2282 addr->can_addr.j1939.pgn = (uint32_t)j1939_pgn; in getsockaddrarg()
2283 addr->can_addr.j1939.addr = j1939_addr; in getsockaddrarg()
2299 switch (s->sock_proto) { in getsockaddrarg()
2303 struct sockaddr_ctl *addr = &addrbuf->ctl; in getsockaddrarg()
2304 addr->sc_family = AF_SYSTEM; in getsockaddrarg()
2305 addr->ss_sysaddr = AF_SYS_CONTROL; in getsockaddrarg()
2326 if (ioctl(s->sock_fd, CTLIOCGINFO, &info)) { in getsockaddrarg()
2332 addr->sc_id = info.ctl_id; in getsockaddrarg()
2333 addr->sc_unit = 0; in getsockaddrarg()
2335 &(addr->sc_id), &(addr->sc_unit))) { in getsockaddrarg()
2357 struct sockaddr_alg *sa = &addrbuf->alg; in getsockaddrarg()
2360 sa->salg_family = AF_ALG; in getsockaddrarg()
2365 caller, Py_TYPE(args)->tp_name); in getsockaddrarg()
2371 &type, &name, &sa->salg_feat, &sa->salg_mask)) in getsockaddrarg()
2375 /* sockaddr_alg has fixed-sized char arrays for type, and name in getsockaddrarg()
2378 if (strlen(type) >= sizeof(sa->salg_type)) { in getsockaddrarg()
2382 strncpy((char *)sa->salg_type, type, sizeof(sa->salg_type)); in getsockaddrarg()
2383 if (strlen(name) >= sizeof(sa->salg_name)) { in getsockaddrarg()
2387 strncpy((char *)sa->salg_name, name, sizeof(sa->salg_name)); in getsockaddrarg()
2412 switch (s->sock_family) { in getsockaddrlen()
2448 /* RDS sockets use sockaddr_in: fall-through */ in getsockaddrlen()
2468 switch(s->sock_proto) in getsockaddrlen()
2524 switch(s->sock_proto) { in getsockaddrlen()
2570 if (length > (SOCKLEN_T_LIMIT - CMSG_LEN(0))) in get_CMSG_LEN()
2589 if (length > (SOCKLEN_T_LIMIT - CMSG_SPACE(1))) in get_CMSG_SPACE()
2599 /* Return true iff msg->msg_controllen is valid, cmsgh is a valid
2600 pointer in msg->msg_control with at least "space" bytes after it,
2607 sizeof(cmsgh->cmsg_len)); in cmsg_min_space()
2610 if (cmsgh == NULL || msg->msg_control == NULL) in cmsg_min_space()
2619 #pragma clang diagnostic ignored "-Wtautological-compare" in cmsg_min_space()
2623 #pragma GCC diagnostic ignored "-Wtype-limits" in cmsg_min_space()
2625 if (msg->msg_controllen < 0) in cmsg_min_space()
2635 cmsg_offset = (char *)cmsgh - (char *)msg->msg_control; in cmsg_min_space()
2636 return (cmsg_offset <= (size_t)-1 - space && in cmsg_min_space()
2637 cmsg_offset + space <= msg->msg_controllen); in cmsg_min_space()
2640 /* If pointer CMSG_DATA(cmsgh) is in buffer msg->msg_control, set
2642 true; otherwise, return false. Assumes cmsgh, msg->msg_control and
2643 msg->msg_controllen are valid. */
2652 data_offset = data_ptr - (char *)msg->msg_control; in get_cmsg_data_space()
2653 if (data_offset > msg->msg_controllen) in get_cmsg_data_space()
2655 *space = msg->msg_controllen - data_offset; in get_cmsg_data_space()
2660 msg->msg_control, return -1. If cmsgh is valid and its associated
2672 cmsgh->cmsg_len < CMSG_LEN(0)) in get_cmsg_data_len()
2673 return -1; in get_cmsg_data_len()
2674 cmsg_data_len = cmsgh->cmsg_len - CMSG_LEN(0); in get_cmsg_data_len()
2676 return -1; in get_cmsg_data_len()
2696 static int accept4_works = -1;
2703 struct sockaddr *addr = SAS2SA(ctx->addrbuf); in sock_accept_impl()
2704 socklen_t *paddrlen = ctx->addrlen; in sock_accept_impl()
2708 if (s->sock_family == AF_ALG) { in sock_accept_impl()
2711 *ctx->addrlen = 0; in sock_accept_impl()
2717 ctx->result = accept4(s->sock_fd, addr, paddrlen, in sock_accept_impl()
2719 if (ctx->result == INVALID_SOCKET && accept4_works == -1) { in sock_accept_impl()
2725 ctx->result = accept(s->sock_fd, addr, paddrlen); in sock_accept_impl()
2727 ctx->result = accept(s->sock_fd, addr, paddrlen); in sock_accept_impl()
2731 return (ctx->result != INVALID_SOCKET); in sock_accept_impl()
2733 return (ctx->result >= 0); in sock_accept_impl()
2737 /* s._accept() -> (fd, address) */
2788 addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf), in sock_accept()
2789 addrlen, s->sock_proto); in sock_accept()
2802 "_accept() -> (integer, address info)\n\
2811 False -- non-blocking mode; same as settimeout(0)
2812 True -- blocking mode; same as settimeout(None)
2821 if (block == -1 && PyErr_Occurred()) in sock_setblocking()
2824 s->sock_timeout = _PyTime_FromSeconds(block ? -1 : 0); in sock_setblocking()
2825 if (internal_setblocking(s, block) == -1) { in sock_setblocking()
2834 Set the socket to blocking (flag is true) or non-blocking (false).\n\
2840 False if it is in non-blocking mode.
2845 if (s->sock_timeout) { in sock_getblocking()
2857 is in non-blocking mode.");
2871 *timeout = _PyTime_FromSeconds(-1); in socket_parse_timeout()
2877 return -1; in socket_parse_timeout()
2881 return -1; in socket_parse_timeout()
2894 return -1; in socket_parse_timeout()
2901 None -- no timeout, blocking mode; same as setblocking(True)
2902 0.0 -- non-blocking mode; same as setblocking(False)
2903 > 0 -- timeout mode; operations time out after timeout seconds
2904 < 0 -- illegal; raises an exception
2914 s->sock_timeout = timeout; in sock_settimeout()
2922 number, the FD is in a non-blocking mode, and socket ops are in sock_settimeout()
2925 When timeout is 0.0, the FD is in a non-blocking mode. in sock_settimeout()
2934 ``0.0`` ``False`` non-blocking in sock_settimeout()
2935 ``> 0`` ``True`` non-blocking in sock_settimeout()
2938 if (internal_setblocking(s, block) == -1) { in sock_settimeout()
2957 if (s->sock_timeout < 0) { in sock_gettimeout()
2961 double seconds = _PyTime_AsSecondsDouble(s->sock_timeout); in sock_gettimeout()
2967 "gettimeout() -> timeout\n\
2970 operations. A timeout of None indicates that timeouts on socket\n\
2979 use optional built-in module 'struct' to encode the string.
2994 if (s->sock_family == AF_VSOCK) { in sock_setsockopt()
3000 res = setsockopt(s->sock_fd, level, optname, in sock_setsockopt()
3011 res = setsockopt(s->sock_fd, level, optname, in sock_setsockopt()
3021 res = setsockopt(s->sock_fd, level, optname, in sock_setsockopt()
3040 res = setsockopt(s->sock_fd, level, optname, in sock_setsockopt()
3043 res = setsockopt(s->sock_fd, level, optname, optval.buf, optval.len); in sock_setsockopt()
3049 return s->errorhandler(); in sock_setsockopt()
3065 /* s.getsockopt() method.
3068 use optional built-in module 'struct' to decode the string. */
3081 if (!PyArg_ParseTuple(args, "ii|i:getsockopt", in sock_getsockopt()
3087 if (s->sock_family == AF_VSOCK) { in sock_getsockopt()
3090 res = getsockopt(s->sock_fd, level, optname, in sock_getsockopt()
3093 return s->errorhandler(); in sock_getsockopt()
3098 res = getsockopt(s->sock_fd, level, optname, in sock_getsockopt()
3101 return s->errorhandler(); in sock_getsockopt()
3105 if (s->sock_family == AF_VSOCK) { in sock_getsockopt()
3107 "getsockopt string buffer not allowed"); in sock_getsockopt()
3113 "getsockopt buflen out of range"); in sock_getsockopt()
3119 res = getsockopt(s->sock_fd, level, optname, in sock_getsockopt()
3123 return s->errorhandler(); in sock_getsockopt()
3130 "getsockopt(level, option[, buffersize]) -> value\n\
3156 res = bind(s->sock_fd, SAS2SA(&addrbuf), addrlen); in sock_bind()
3159 return s->errorhandler(); in sock_bind()
3173 Set the file descriptor to -1 so operations tried subsequently
3182 fd = s->sock_fd; in sock_close()
3184 s->sock_fd = INVALID_SOCKET; in sock_close()
3188 http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html in sock_close()
3193 /* bpo-30319: The peer can already have closed the connection. in sock_close()
3196 return s->errorhandler(); in sock_close()
3210 SOCKET_T fd = s->sock_fd; in sock_detach()
3211 s->sock_fd = INVALID_SOCKET; in sock_detach()
3229 if (getsockopt(s->sock_fd, SOL_SOCKET, SO_ERROR, (void *)&err, &size)) { in sock_connect_impl()
3230 /* getsockopt() failed */ in sock_connect_impl()
3251 res = connect(s->sock_fd, addr, addrlen); in internal_connect()
3265 return -1; in internal_connect()
3272 get the connection status using getsockopt(SO_ERROR). in internal_connect()
3274 If the socket is non-blocking, raise InterruptedError. The caller is in internal_connect()
3277 wait_connect = (s->sock_timeout != 0 && IS_SELECTABLE(s)); in internal_connect()
3280 wait_connect = (s->sock_timeout > 0 && err == SOCK_INPROGRESS_ERR in internal_connect()
3288 s->errorhandler(); in internal_connect()
3289 return -1; in internal_connect()
3298 1, NULL, s->sock_timeout) < 0) in internal_connect()
3299 return -1; in internal_connect()
3304 1, &err, s->sock_timeout) < 0) in internal_connect()
3366 "connect_ex(address) -> errno\n\
3378 return PyLong_FromSocket_t(s->sock_fd); in sock_fileno()
3382 "fileno() -> integer\n\
3401 res = getsockname(s->sock_fd, SAS2SA(&addrbuf), &addrlen); in sock_getsockname()
3404 return s->errorhandler(); in sock_getsockname()
3405 return makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen, in sock_getsockname()
3406 s->sock_proto); in sock_getsockname()
3410 "getsockname() -> address info\n\
3414 (hostaddr, port). For IPv6 sockets, the address info is a 4-tuple\n\
3419 #ifdef HAVE_GETPEERNAME /* Cray APP doesn't have this :-( */
3433 res = getpeername(s->sock_fd, SAS2SA(&addrbuf), &addrlen); in sock_getpeername()
3436 return s->errorhandler(); in sock_getpeername()
3437 return makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen, in sock_getpeername()
3438 s->sock_proto); in sock_getpeername()
3442 "getpeername() -> address info\n\
3469 res = listen(s->sock_fd, backlog); in sock_listen()
3472 return s->errorhandler(); in sock_listen()
3498 if (ctx->len > INT_MAX) in sock_recv_impl()
3499 ctx->len = INT_MAX; in sock_recv_impl()
3500 ctx->result = recv(s->sock_fd, ctx->cbuf, (int)ctx->len, ctx->flags); in sock_recv_impl()
3502 ctx->result = recv(s->sock_fd, ctx->cbuf, ctx->len, ctx->flags); in sock_recv_impl()
3504 return (ctx->result >= 0); in sock_recv_impl()
3512 * successfully read. If there was an error, it returns -1. Note that it is
3524 return -1; in sock_recv_guts()
3535 return -1; in sock_recv_guts()
3582 "recv(buffersize[, flags]) -> data\n\
3643 "recv_into(buffer, [nbytes[, flags]]) -> nbytes_read\n\
3666 memset(ctx->addrbuf, 0, *ctx->addrlen); in sock_recvfrom_impl()
3669 if (ctx->len > INT_MAX) in sock_recvfrom_impl()
3670 ctx->len = INT_MAX; in sock_recvfrom_impl()
3671 ctx->result = recvfrom(s->sock_fd, ctx->cbuf, (int)ctx->len, ctx->flags, in sock_recvfrom_impl()
3672 SAS2SA(ctx->addrbuf), ctx->addrlen); in sock_recvfrom_impl()
3674 ctx->result = recvfrom(s->sock_fd, ctx->cbuf, ctx->len, ctx->flags, in sock_recvfrom_impl()
3675 SAS2SA(ctx->addrbuf), ctx->addrlen); in sock_recvfrom_impl()
3677 return (ctx->result >= 0); in sock_recvfrom_impl()
3685 * of bytes successfully read. If there was an error, it returns -1. Note
3703 return -1; in sock_recvfrom_guts()
3707 return -1; in sock_recvfrom_guts()
3716 return -1; in sock_recvfrom_guts()
3718 *addr = makesockaddr(s->sock_fd, SAS2SA(&addrbuf), addrlen, in sock_recvfrom_guts()
3719 s->sock_proto); in sock_recvfrom_guts()
3721 return -1; in sock_recvfrom_guts()
3773 "recvfrom(buffersize[, flags]) -> (data, address info)\n\
3830 "recvfrom_into(buffer[, nbytes[, flags]]) -> (nbytes, address info)\n\
3849 ctx->result = recvmsg(s->sock_fd, ctx->msg, ctx->flags); in sock_recvmsg_impl()
3850 return (ctx->result >= 0); in sock_recvmsg_impl()
3887 SAS2SA(&addrbuf)->sa_family = AF_UNSPEC; in sock_recvmsg_guts()
3928 "received malformed or improperly-truncated " in sock_recvmsg_guts()
3929 "ancillary data", 1) == -1) in sock_recvmsg_guts()
3941 tuple = Py_BuildValue("iiN", (int)cmsgh->cmsg_level, in sock_recvmsg_guts()
3942 (int)cmsgh->cmsg_type, bytes); in sock_recvmsg_guts()
3958 makesockaddr(s->sock_fd, SAS2SA(&addrbuf), in sock_recvmsg_guts()
3961 s->sock_proto)); in sock_recvmsg_guts()
3978 if (cmsgh->cmsg_level == SOL_SOCKET && in sock_recvmsg_guts()
3979 cmsgh->cmsg_type == SCM_RIGHTS) { in sock_recvmsg_guts()
3985 while (numfds-- > 0) in sock_recvmsg_guts()
4039 "recvmsg(bufsize[, ancbufsize[, flags]]) -> (data, ancdata, msg_flags, address)\n\
4050 The return value is a 4-tuple: (data, ancdata, msg_flags, address).\n\
4051 The data item is a bytes object holding the non-ancillary data\n\
4055 specifying the protocol level and protocol-specific type respectively,\n\
4110 "of single-segment read-write buffers", in sock_recvmsg_into()
4129 "recvmsg_into(buffers[, ancbufsize[, flags]]) -> (nbytes, ancdata, msg_flags, address)\n\
4132 non-ancillary data into a series of buffers. The buffers argument\n\
4135 of the non-ancillary data until it has all been written or there are\n\
4144 The return value is a 4-tuple: (nbytes, ancdata, msg_flags, address).\n\
4145 The nbytes item is the total number of bytes of non-ancillary data\n\
4149 integers specifying the protocol level and protocol-specific type\n\
4176 if (ctx->len > INT_MAX) in sock_send_impl()
4177 ctx->len = INT_MAX; in sock_send_impl()
4178 ctx->result = send(s->sock_fd, ctx->buf, (int)ctx->len, ctx->flags); in sock_send_impl()
4180 ctx->result = send(s->sock_fd, ctx->buf, ctx->len, ctx->flags); in sock_send_impl()
4182 return (ctx->result >= 0); in sock_send_impl()
4214 "send(data[, flags]) -> count\n\
4231 int has_timeout = (s->sock_timeout > 0); in sock_sendall()
4232 _PyTime_t timeout = s->sock_timeout; in sock_sendall()
4273 len -= n; in sock_sendall()
4316 if (ctx->len > INT_MAX) in sock_sendto_impl()
4317 ctx->len = INT_MAX; in sock_sendto_impl()
4318 ctx->result = sendto(s->sock_fd, ctx->buf, (int)ctx->len, ctx->flags, in sock_sendto_impl()
4319 SAS2SA(ctx->addrbuf), ctx->addrlen); in sock_sendto_impl()
4321 ctx->result = sendto(s->sock_fd, ctx->buf, ctx->len, ctx->flags, in sock_sendto_impl()
4322 SAS2SA(ctx->addrbuf), ctx->addrlen); in sock_sendto_impl()
4324 return (ctx->result >= 0); in sock_sendto_impl()
4389 "sendto(data[, flags], address) -> count\n\
4410 int result = -1; in sock_sendmsg_iovec()
4430 msg->msg_iovlen = ndataparts; in sock_sendmsg_iovec()
4437 msg->msg_iov = iovs; in sock_sendmsg_iovec()
4448 "bytes-like objects", in sock_sendmsg_iovec()
4467 ctx->result = sendmsg(s->sock_fd, ctx->msg, ctx->flags); in sock_sendmsg_impl()
4468 return (ctx->result >= 0); in sock_sendmsg_impl()
4519 if (sock_sendmsg_iovec(s, data_arg, &msg, &databufs, &ndatabufs) == -1) {
4592 returns NULL if it doesn't. Zero-filling the buffer
4615 cmsgh->cmsg_len = msg_len;
4625 cmsgh->cmsg_level = cmsgs[i].level;
4626 cmsgh->cmsg_type = cmsgs[i].type;
4659 "sendmsg(buffers[, ancdata[, flags[, address]]]) -> count\n\
4662 non-ancillary data from a series of buffers and concatenating it into\n\
4663 a single message. The buffers argument specifies the non-ancillary\n\
4664 data as an iterable of bytes-like objects (e.g. bytes objects).\n\
4668 protocol level and protocol-specific type respectively, and cmsg_data\n\
4669 is a bytes-like object holding the associated data. The flags\n\
4672 the message. The return value is the number of bytes of non-ancillary\n\
4689 int op = -1;
4692 int assoclen = -1;
4705 if (self->sock_family != AF_ALG) {
4721 /* op is a required, keyword-only argument >= 0 */
4734 if (assoclen == -1 && PyErr_Occurred()) {
4765 if (sock_sendmsg_iovec(self, data_arg, &msg, &databufs, &ndatabufs) == -1) {
4777 header->cmsg_level = SOL_ALG;
4778 header->cmsg_type = ALG_SET_OP;
4779 header->cmsg_len = CMSG_LEN(4);
4791 header->cmsg_level = SOL_ALG;
4792 header->cmsg_type = ALG_SET_IV;
4793 header->cmsg_len = CMSG_SPACE(sizeof(*alg_iv) + iv.len);
4795 alg_iv->ivlen = iv.len;
4796 memcpy(alg_iv->iv, iv.buf, iv.len);
4807 header->cmsg_level = SOL_ALG;
4808 header->cmsg_type = ALG_SET_AEAD_ASSOCLEN;
4809 header->cmsg_len = CMSG_LEN(4);
4852 if (how == -1 && PyErr_Occurred())
4855 res = shutdown(s->sock_fd, how);
4858 return s->errorhandler();
4885 if (WSAIoctl(s->sock_fd, cmd, &option, sizeof(option),
4895 if (WSAIoctl(s->sock_fd, cmd, &ka, sizeof(ka),
4905 if (WSAIoctl(s->sock_fd, cmd, &option, sizeof(option),
4917 "ioctl(cmd, option) -> long\n\
4937 result = WSADuplicateSocketW(s->sock_fd, processId, &info);
4944 "share(process_id) -> bytes\n\
4985 {"getsockopt", (PyCFunction)sock_getsockopt, METH_VARARGS,
5073 if (s->sock_fd != INVALID_SOCKET) {
5085 fd = s->sock_fd;
5086 s->sock_fd = INVALID_SOCKET;
5104 Py_TYPE(s)->tp_free((PyObject *)s);
5113 if (s->sock_fd == INVALID_SOCKET) {
5114 sock_fd = -1;
5117 else if (s->sock_fd > LONG_MAX) {
5128 sock_fd = (long)s->sock_fd;
5131 sock_fd, s->sock_family,
5132 s->sock_type,
5133 s->sock_proto);
5144 new = type->tp_alloc(type, 0);
5146 ((PySocketSockObject *)new)->sock_fd = INVALID_SOCKET;
5147 ((PySocketSockObject *)new)->sock_timeout = _PyTime_FromSeconds(-1);
5148 ((PySocketSockObject *)new)->errorhandler = &set_error;
5159 static int sock_cloexec_works = -1;
5176 family: int = -1
5177 type: int = -1
5178 proto: int = -1
5205 return -1;
5218 return -1;
5225 return -1;
5234 return -1;
5244 if (fd == (SOCKET_T)(-1) && PyErr_Occurred())
5245 return -1;
5252 return -1;
5262 if (family == -1) {
5263 family = SAS2SA(&addrbuf)->sa_family;
5270 if (family == -1 || CHECK_ERRNO(ENOTSOCK)) {
5273 if (family == -1 || CHECK_ERRNO(EBADF) || CHECK_ERRNO(ENOTSOCK)) {
5276 return -1;
5281 if (type == -1) {
5284 if (getsockopt(fd, SOL_SOCKET, SO_TYPE,
5290 return -1;
5297 if (proto == -1) {
5300 if (getsockopt(fd, SOL_SOCKET, SO_PROTOCOL,
5306 return -1;
5316 if (family == -1) {
5319 if (type == -1) {
5322 if (proto == -1) {
5349 return -1;
5356 return -1;
5365 if (sock_cloexec_works == -1) {
5385 return -1;
5390 return -1;
5394 if (init_sockobject(self, fd, family, type, proto) == -1) {
5396 return -1;
5509 res = gethostname(buf, (int) sizeof buf - 1);
5513 buf[sizeof buf - 1] = '\0';
5519 "gethostname() -> string\n\
5591 "gethostbyname(host) -> address\n\
5606 /* Decode from UTF-8 */
5629 if (h->h_addrtype != af) {
5659 if (h->h_aliases) {
5660 for (pch = h->h_aliases; *pch != NULL; pch++) {
5674 for (pch = h->h_addr_list; *pch != NULL; pch++) {
5690 if (pch == h->h_addr_list && alen >= sizeof(sin))
5707 if (pch == h->h_addr_list && alen >= sizeof(sin6))
5729 name = sock_decode_hostname(h->h_name);
5759 int buf_len = (sizeof buf) - 1;
5800 sa->sa_family);
5810 "gethostbyname_ex(host) -> (name, aliaslist, addresslist)\n\
5834 gethostbyaddr_r is 8-byte aligned, which at least llvm-gcc
5838 int buf_len = (sizeof buf) - 1;
5857 af = sa->sa_family;
5862 ap = (char *)&((struct sockaddr_in *)sa)->sin_addr;
5863 al = sizeof(((struct sockaddr_in *)sa)->sin_addr);
5867 ap = (char *)&((struct sockaddr_in6 *)sa)->sin6_addr;
5868 al = sizeof(((struct sockaddr_in6 *)sa)->sin6_addr);
5907 "gethostbyaddr(host) -> (name, aliaslist, addresslist)\n\
5938 return PyLong_FromLong((long) ntohs(sp->s_port));
5942 "getservbyname(servicename[, protocolname]) -> integer\n\
5966 "getservbyport: port must be 0-65535.");
5981 return PyUnicode_FromString(sp->s_name);
5985 "getservbyport(port[, protocolname]) -> string\n\
6012 return PyLong_FromLong((long) sp->p_proto);
6016 "getprotobyname(name) -> integer\n\
6028 if (fd == (SOCKET_T)(-1) && PyErr_Occurred())
6033 /* bpo-30319: The peer can already have closed the connection.
6042 "close(integer) -> None\n\
6060 if (fd == (SOCKET_T)(-1) && PyErr_Occurred())
6092 "dup(integer) -> integer\n\
6133 if (sock_cloexec_works == -1) {
6180 "socketpair([family[, type [, proto]]]) -> (socket object, socket object)\n\
6201 "16-bit unsigned integer");
6207 "16-bit unsigned integer");
6214 "ntohs(integer) -> integer\n\
6216 Convert a 16-bit unsigned integer from network to host byte order.");
6226 if (x == (unsigned long) -1 && PyErr_Occurred())
6243 Py_TYPE(arg)->tp_name);
6248 "ntohl(integer) -> integer\n\
6250 Convert a 32-bit integer from network to host byte order.");
6264 "16-bit unsigned integer");
6270 "16-bit unsigned integer");
6277 "htons(integer) -> integer\n\
6279 Convert a 16-bit unsigned integer from host to network byte order.");
6289 if (x == (unsigned long) -1 && PyErr_Occurred())
6306 Py_TYPE(arg)->tp_name);
6311 "htonl(integer) -> integer\n\
6313 Convert a 32-bit integer from host to network byte order.");
6318 "inet_aton(string) -> bytes giving packed 32-bit IP representation\n\
6320 Convert an IP address in string format (123.45.67.89) to the 32-bit packed\n\
6321 binary format used in low-level network functions.");
6332 #error "Not sure if in_addr_t exists and int is not 32-bits."
6364 /* special-case this address as inet_addr might return INADDR_NONE
6391 "inet_ntoa(packed_ip) -> ip_address_string\n\
6393 Convert an IP address from 32-bit packed binary format to string format");
6423 "inet_pton(af, ip) -> packed IP address string\n\
6426 for use with low-level network functions.");
6474 "inet_ntop(af, packed_ip) -> string formatted IP address\n\
6517 /* inet_ntop guarantee NUL-termination of resulting string. */
6574 if (value == -1 && PyErr_Occurred())
6614 res0 = NULL; // gh-100795
6622 for (res = res0; res; res = res->ai_next) {
6625 makesockaddr(-1, res->ai_addr, res->ai_addrlen, protocol);
6628 single = Py_BuildValue("iiisO", res->ai_family,
6629 res->ai_socktype, res->ai_protocol,
6630 res->ai_canonname ? res->ai_canonname : "",
6656 -> list of (family, type, proto, canonname, sockaddr)\n\
6694 "getnameinfo(): flowinfo must be 0-1048575.");
6711 res = NULL; // gh-100795
6715 if (res->ai_next) {
6720 switch (res->ai_family) {
6734 sin6 = (struct sockaddr_in6 *)res->ai_addr;
6735 sin6->sin6_flowinfo = htonl(flowinfo);
6736 sin6->sin6_scope_id = scope_id;
6742 error = getnameinfo(res->ai_addr, (socklen_t) res->ai_addrlen,
6762 "getnameinfo(sockaddr, flags) --> (host, port)\n\
6782 "getdefaulttimeout() -> timeout\n\
6826 for (ULONG i = 0; i < tbl->NumEntries; ++i) {
6827 MIB_IF_ROW2 r = tbl->Table[i];
6837 if (tuple == NULL || PyList_Append(list, tuple) == -1) {
6867 they access the not-msan-tracked if_name string data. */
6878 if (ni_tuple == NULL || PyList_Append(list, ni_tuple) == -1) {
6937 if (index == (unsigned long) -1)
6975 "CMSG_LEN(length) -> control message length\n\
7006 "CMSG_SPACE(length) -> buffer size\n\
7168 Py_DECREF(capi->Sock_Type);
7169 Py_DECREF(capi->error);
7170 Py_DECREF(capi->timeout_error);
7190 capi->Sock_Type = (PyTypeObject *)Py_NewRef(&sock_type);
7191 capi->error = Py_NewRef(PyExc_OSError);
7192 capi->timeout_error = Py_NewRef(PyExc_TimeoutError);
7202 os-specific initialization fails. On Windows, this does WINSOCK
7216 -1,
7233 if (support_wsa_no_inherit == -1) {
7753 // workaround for https://github.com/WebAssembly/wasi-libc/issues/305
8560 /* remove some flags on older version Windows during run-time */