Skip to content

Commit 99e5e66

Browse files
committed
socketpool: Always use getaddrinfo_raise.
1 parent 34bee59 commit 99e5e66

File tree

4 files changed

+29
-73
lines changed

4 files changed

+29
-73
lines changed

ports/espressif/common-hal/socketpool/SocketPool.c

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -60,48 +60,30 @@ static mp_obj_t format_address(const struct sockaddr *addr, int family) {
6060
return mp_obj_new_str(ip_str, strlen(ip_str));
6161
}
6262

63-
mp_obj_t common_hal_socketpool_socketpool_gethostbyname(socketpool_socketpool_obj_t *self,
64-
const char *host) {
65-
66-
const struct addrinfo hints = {
67-
.ai_family = AF_INET,
68-
.ai_socktype = SOCK_STREAM,
69-
};
70-
struct addrinfo *res = NULL;
71-
int err = socketpool_getaddrinfo_common(host, 0, &hints, &res);
72-
if (err != 0 || res == NULL) {
73-
return mp_const_none;
74-
}
75-
76-
nlr_buf_t nlr;
77-
if (nlr_push(&nlr) == 0) {
78-
mp_obj_t result = format_address(res->ai_addr, res->ai_family);
79-
nlr_pop();
80-
lwip_freeaddrinfo(res);
81-
return result;
82-
} else {
83-
lwip_freeaddrinfo(res);
84-
nlr_raise(MP_OBJ_FROM_PTR(nlr.ret_val));
85-
};
86-
}
87-
88-
#if CIRCUITPY_SOCKETPOOL_IPV6
8963
static mp_obj_t convert_sockaddr(const struct addrinfo *ai, int port) {
64+
#if CIRCUITPY_SOCKETPOOL_IPV6
9065
mp_int_t n_tuple = ai->ai_family == AF_INET6 ? 4 : 2;
66+
#else
67+
mp_int_t n_tuple = 2;
68+
#endif
9169
mp_obj_tuple_t *result = MP_OBJ_TO_PTR(mp_obj_new_tuple(n_tuple, NULL));
9270
result->items[0] = format_address(ai->ai_addr, ai->ai_family);
9371
result->items[1] = MP_OBJ_NEW_SMALL_INT(port);
72+
#if CIRCUITPY_SOCKETPOOL_IPV6
9473
if (ai->ai_family == AF_INET6) {
9574
const struct sockaddr_in6 *ai6 = (void *)ai->ai_addr;
9675
result->items[2] = MP_OBJ_NEW_SMALL_INT(ai6->sin6_flowinfo);
9776
result->items[3] = MP_OBJ_NEW_SMALL_INT(ai6->sin6_scope_id);
9877
}
78+
#endif
9979
return result;
10080
}
10181

10282
static mp_obj_t convert_addrinfo(const struct addrinfo *ai, int port) {
10383
MP_STATIC_ASSERT(AF_INET == SOCKETPOOL_AF_INET);
84+
#if CIRCUITPY_SOCKETPOOL_IPV6
10485
MP_STATIC_ASSERT(AF_INET6 == SOCKETPOOL_AF_INET6);
86+
#endif
10587
// MP_STATIC_ASSERT(AF_UNSPEC == SOCKETPOOL_AF_UNSPEC);
10688
mp_obj_tuple_t *result = MP_OBJ_TO_PTR(mp_obj_new_tuple(5, NULL));
10789
result->items[0] = MP_OBJ_NEW_SMALL_INT(ai->ai_family);
@@ -113,7 +95,6 @@ static mp_obj_t convert_addrinfo(const struct addrinfo *ai, int port) {
11395
}
11496

11597
mp_obj_t common_hal_socketpool_getaddrinfo_raise(socketpool_socketpool_obj_t *self, const char *host, int port, int family, int type, int proto, int flags) {
116-
MP_STATIC_ASSERT(LWIP_IPV6);
11798
const struct addrinfo hints = {
11899
.ai_flags = flags,
119100
.ai_family = family,
@@ -141,4 +122,3 @@ mp_obj_t common_hal_socketpool_getaddrinfo_raise(socketpool_socketpool_obj_t *se
141122
nlr_raise(MP_OBJ_FROM_PTR(nlr.ret_val));
142123
}
143124
}
144-
#endif

ports/raspberrypi/common-hal/socketpool/SocketPool.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "shared/runtime/interrupt_char.h"
1111
#include "py/runtime.h"
1212
#include "shared-bindings/wifi/__init__.h"
13+
#include "shared-bindings/ipaddress/__init__.h"
1314

1415
#include "lwip/dns.h"
1516
#include "lwip/inet.h"
@@ -22,7 +23,7 @@ void common_hal_socketpool_socketpool_construct(socketpool_socketpool_obj_t *sel
2223

2324
// common_hal_socketpool_socket is in socketpool/Socket.c to centralize open socket tracking.
2425

25-
mp_obj_t common_hal_socketpool_socketpool_gethostbyname(socketpool_socketpool_obj_t *self, const char *host) {
26+
static mp_obj_t common_hal_socketpool_socketpool_gethostbyname_raise(socketpool_socketpool_obj_t *self, const char *host) {
2627

2728
ip_addr_t addr;
2829
socketpool_resolve_host_raise(host, &addr);
@@ -33,6 +34,23 @@ mp_obj_t common_hal_socketpool_socketpool_gethostbyname(socketpool_socketpool_ob
3334
return ip_obj;
3435
}
3536

36-
mp_obj_t common_hal_socketpool_socketpool_gethostbyname_raise(socketpool_socketpool_obj_t *self, const char *host) {
37-
return common_hal_socketpool_socketpool_gethostbyname(self, host);
37+
mp_obj_t common_hal_socketpool_getaddrinfo_raise(socketpool_socketpool_obj_t *self, const char *host, int port, int family, int type, int proto, int flags) {
38+
mp_obj_t ip_str;
39+
40+
if (strlen(host) > 0 && ipaddress_parse_ipv4address(host, strlen(host), NULL)) {
41+
ip_str = mp_obj_new_str(host, strlen(host));
42+
} else {
43+
ip_str = common_hal_socketpool_socketpool_gethostbyname_raise(self, host);
44+
}
45+
46+
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(5, NULL));
47+
tuple->items[0] = MP_OBJ_NEW_SMALL_INT(SOCKETPOOL_AF_INET);
48+
tuple->items[1] = MP_OBJ_NEW_SMALL_INT(SOCKETPOOL_SOCK_STREAM);
49+
tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0);
50+
tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_);
51+
mp_obj_tuple_t *sockaddr = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL));
52+
sockaddr->items[0] = ip_str;
53+
sockaddr->items[1] = MP_OBJ_NEW_SMALL_INT(port);
54+
tuple->items[4] = MP_OBJ_FROM_PTR(sockaddr);
55+
return mp_obj_new_list(1, (mp_obj_t *)&tuple);
3856
}

shared-bindings/socketpool/SocketPool.c

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ static mp_obj_t socketpool_socketpool_getaddrinfo(size_t n_args, const mp_obj_t
142142
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
143143
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
144144

145-
#if CIRCUITPY_SOCKETPOOL_IPV6
146145
return common_hal_socketpool_getaddrinfo_raise(
147146
self,
148147
mp_obj_str_get_str(args[ARG_host].u_obj),
@@ -151,30 +150,6 @@ static mp_obj_t socketpool_socketpool_getaddrinfo(size_t n_args, const mp_obj_t
151150
args[ARG_type].u_int,
152151
args[ARG_proto].u_int,
153152
args[ARG_flags].u_int);
154-
#else
155-
const char *host = mp_obj_str_get_str(args[ARG_host].u_obj);
156-
mp_int_t port = args[ARG_port].u_int;
157-
mp_obj_t ip_str = mp_const_none;
158-
159-
if (strlen(host) > 0 && ipaddress_parse_ipv4address(host, strlen(host), NULL)) {
160-
ip_str = args[ARG_host].u_obj;
161-
}
162-
163-
if (ip_str == mp_const_none) {
164-
ip_str = common_hal_socketpool_socketpool_gethostbyname_raise(self, host);
165-
}
166-
167-
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(5, NULL));
168-
tuple->items[0] = MP_OBJ_NEW_SMALL_INT(SOCKETPOOL_AF_INET);
169-
tuple->items[1] = MP_OBJ_NEW_SMALL_INT(SOCKETPOOL_SOCK_STREAM);
170-
tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0);
171-
tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_);
172-
mp_obj_tuple_t *sockaddr = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL));
173-
sockaddr->items[0] = ip_str;
174-
sockaddr->items[1] = MP_OBJ_NEW_SMALL_INT(port);
175-
tuple->items[4] = MP_OBJ_FROM_PTR(sockaddr);
176-
return mp_obj_new_list(1, (mp_obj_t *)&tuple);
177-
#endif
178153
}
179154
static MP_DEFINE_CONST_FUN_OBJ_KW(socketpool_socketpool_getaddrinfo_obj, 1, socketpool_socketpool_getaddrinfo);
180155

@@ -218,15 +193,6 @@ MP_DEFINE_CONST_OBJ_TYPE(
218193
locals_dict, &socketpool_socketpool_locals_dict
219194
);
220195

221-
MP_WEAK
222-
mp_obj_t common_hal_socketpool_socketpool_gethostbyname_raise(socketpool_socketpool_obj_t *self, const char *host) {
223-
mp_obj_t ip_str = common_hal_socketpool_socketpool_gethostbyname(self, host);
224-
if (ip_str == mp_const_none) {
225-
common_hal_socketpool_socketpool_raise_gaierror_noname();
226-
}
227-
return ip_str;
228-
}
229-
230196
MP_WEAK NORETURN
231197
void common_hal_socketpool_socketpool_raise_gaierror_noname(void) {
232198
vstr_t vstr;

shared-bindings/socketpool/SocketPool.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@ void common_hal_socketpool_socketpool_construct(socketpool_socketpool_obj_t *sel
1919
socketpool_socket_obj_t *common_hal_socketpool_socket(socketpool_socketpool_obj_t *self,
2020
socketpool_socketpool_addressfamily_t family, socketpool_socketpool_sock_t type, int proto);
2121

22-
mp_obj_t common_hal_socketpool_socketpool_gethostbyname(socketpool_socketpool_obj_t *self,
23-
const char *host);
24-
// raises an exception instead of returning mp_const_none in the case of error
25-
mp_obj_t common_hal_socketpool_socketpool_gethostbyname_raise(socketpool_socketpool_obj_t *self,
26-
const char *host);
27-
2822
// Non-allocating version for internal use. These sockets are not registered and, therefore, not
2923
// closed automatically.
3024
bool socketpool_socket(socketpool_socketpool_obj_t *self,
@@ -33,6 +27,4 @@ bool socketpool_socket(socketpool_socketpool_obj_t *self,
3327

3428
NORETURN void common_hal_socketpool_socketpool_raise_gaierror_noname(void);
3529

36-
#if CIRCUITPY_SOCKETPOOL_IPV6
3730
mp_obj_t common_hal_socketpool_getaddrinfo_raise(socketpool_socketpool_obj_t *self, const char *host, int port, int family, int type, int proto, int flags);
38-
#endif

0 commit comments

Comments
 (0)