Skip to content

Commit 297657e

Browse files
committed
Refactor so that all sites of name lookup failure result in gaierror
1 parent fc13fba commit 297657e

File tree

6 files changed

+49
-33
lines changed

6 files changed

+49
-33
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ void common_hal_socketpool_socket_connect(socketpool_socket_obj_t *self,
369369
struct addrinfo *result_i;
370370
int error = lwip_getaddrinfo(host, NULL, &hints, &result_i);
371371
if (error != 0 || result_i == NULL) {
372-
mp_raise_OSError(EHOSTUNREACH);
372+
common_hal_socketpool_socketpool_raise_gaierror(SOCKETPOOL_EAI_NONAME, MP_QSTR_Name_space_or_space_service_space_not_space_known);
373373
}
374374

375375
// Set parameters
@@ -550,7 +550,7 @@ mp_uint_t common_hal_socketpool_socket_sendto(socketpool_socket_obj_t *self,
550550
struct addrinfo *result_i;
551551
int error = lwip_getaddrinfo(host, NULL, &hints, &result_i);
552552
if (error != 0 || result_i == NULL) {
553-
mp_raise_OSError(EHOSTUNREACH);
553+
common_hal_socketpool_socketpool_raise_gaierror(SOCKETPOOL_EAI_NONAME, MP_QSTR_Name_space_or_space_service_space_not_space_known);
554554
}
555555

556556
// Set parameters

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

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -872,11 +872,7 @@ bool common_hal_socketpool_socket_bind(socketpool_socket_obj_t *socket,
872872
ip_addr_t bind_addr;
873873
const ip_addr_t *bind_addr_ptr = &bind_addr;
874874
if (hostlen > 0) {
875-
int error = socketpool_resolve_host(socket->pool, host, &bind_addr);
876-
if (error != 0) {
877-
mp_raise_OSError(EHOSTUNREACH);
878-
}
879-
875+
socketpool_resolve_host_raise(socket->pool, host, &bind_addr);
880876
} else {
881877
bind_addr_ptr = IP_ANY_TYPE;
882878
}
@@ -965,10 +961,7 @@ void common_hal_socketpool_socket_connect(socketpool_socket_obj_t *socket,
965961

966962
// get address
967963
ip_addr_t dest;
968-
int error = socketpool_resolve_host(socket->pool, host, &dest);
969-
if (error != 0) {
970-
mp_raise_OSError(EHOSTUNREACH);
971-
}
964+
socketpool_resolve_host_raise(socket->pool, host, &dest);
972965

973966
err_t err = ERR_ARG;
974967
switch (socket->type) {
@@ -1163,10 +1156,7 @@ mp_uint_t common_hal_socketpool_socket_sendto(socketpool_socket_obj_t *socket,
11631156
const char *host, size_t hostlen, uint32_t port, const uint8_t *buf, uint32_t len) {
11641157
int _errno;
11651158
ip_addr_t ip;
1166-
int error = socketpool_resolve_host(socket->pool, host, &ip);
1167-
if (error != 0) {
1168-
mp_raise_OSError(EHOSTUNREACH);
1169-
}
1159+
socketpool_resolve_host_raise(socket->pool, host, &ip);
11701160

11711161
mp_uint_t ret = 0;
11721162
switch (socket->type) {

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ STATIC void lwip_getaddrinfo_cb(const char *name, const ip_addr_t *ipaddr, void
5757
}
5858
}
5959

60-
int socketpool_resolve_host(socketpool_socketpool_obj_t *self, const char *host, ip_addr_t *addr) {
60+
STATIC int socketpool_resolve_host(socketpool_socketpool_obj_t *self, const char *host, ip_addr_t *addr) {
6161

6262
getaddrinfo_state_t state;
6363
state.status = 0;
@@ -94,17 +94,26 @@ int socketpool_resolve_host(socketpool_socketpool_obj_t *self, const char *host,
9494
return 0;
9595
}
9696

97-
mp_obj_t common_hal_socketpool_socketpool_gethostbyname(socketpool_socketpool_obj_t *self,
98-
const char *host) {
99-
100-
ip_addr_t addr;
101-
int result = socketpool_resolve_host(self, host, &addr);
97+
void socketpool_resolve_host_raise(socketpool_socketpool_obj_t *self, const char *host, ip_addr_t *addr) {
98+
int result = socketpool_resolve_host(self, host, addr);
10299
if (result < 0) {
100+
printf("socket_resolve_host() returned %d\n", result);
101+
common_hal_socketpool_socketpool_raise_gaierror(SOCKETPOOL_EAI_NONAME, MP_QSTR_Name_space_or_space_service_space_not_space_known);
103102
mp_raise_OSError(-result);
104103
}
104+
}
105+
106+
mp_obj_t common_hal_socketpool_socketpool_gethostbyname(socketpool_socketpool_obj_t *self, const char *host) {
107+
108+
ip_addr_t addr;
109+
socketpool_resolve_host_raise(self, host, &addr);
105110

106111
char ip_str[IP4ADDR_STRLEN_MAX];
107112
inet_ntoa_r(addr, ip_str, IP4ADDR_STRLEN_MAX);
108113
mp_obj_t ip_obj = mp_obj_new_str(ip_str, strlen(ip_str));
109114
return ip_obj;
110115
}
116+
117+
mp_obj_t common_hal_socketpool_socketpool_gethostbyname_raise(socketpool_socketpool_obj_t *self, const char *host) {
118+
return common_hal_socketpool_socketpool_gethostbyname(self, host);
119+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ typedef struct {
3232
mp_obj_base_t base;
3333
} socketpool_socketpool_obj_t;
3434

35-
int socketpool_resolve_host(socketpool_socketpool_obj_t *self, const char *host, ip_addr_t *addr);
35+
void socketpool_resolve_host_raise(socketpool_socketpool_obj_t *self, const char *host, ip_addr_t *addr);

shared-bindings/socketpool/SocketPool.c

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
#include "shared-bindings/socketpool/Socket.h"
3737
#include "shared-bindings/socketpool/SocketPool.h"
3838

39-
#define SOCKETPOOL_EAI_NONAME (-2)
40-
4139
//| class SocketPool:
4240
//| """A pool of socket resources available for the given radio. Only one
4341
//| SocketPool can be created for each radio.
@@ -151,15 +149,7 @@ STATIC mp_obj_t socketpool_socketpool_getaddrinfo(size_t n_args, const mp_obj_t
151149
}
152150

153151
if (ip_str == mp_const_none) {
154-
ip_str = common_hal_socketpool_socketpool_gethostbyname(self, host);
155-
}
156-
157-
if (ip_str == mp_const_none) {
158-
mp_obj_t exc_args[2] = {
159-
MP_OBJ_NEW_SMALL_INT(SOCKETPOOL_EAI_NONAME),
160-
MP_OBJ_NEW_QSTR(MP_QSTR_Name_space_or_space_service_space_not_space_known),
161-
};
162-
nlr_raise(mp_obj_new_exception_args(&mp_type_gaierror, 2, exc_args));
152+
ip_str = common_hal_socketpool_socketpool_gethostbyname_raise(self, host);
163153
}
164154

165155
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(5, NULL));
@@ -203,3 +193,21 @@ const mp_obj_type_t socketpool_socketpool_type = {
203193
.make_new = socketpool_socketpool_make_new,
204194
.locals_dict = (mp_obj_dict_t *)&socketpool_socketpool_locals_dict,
205195
};
196+
197+
MP_WEAK
198+
mp_obj_t common_hal_socketpool_socketpool_gethostbyname_raise(socketpool_socketpool_obj_t *self, const char *host) {
199+
mp_obj_t ip_str = common_hal_socketpool_socketpool_gethostbyname(self, host);
200+
if (ip_str == mp_const_none) {
201+
common_hal_socketpool_socketpool_raise_gaierror(SOCKETPOOL_EAI_NONAME, MP_QSTR_Name_space_or_space_service_space_not_space_known);
202+
}
203+
return ip_str;
204+
}
205+
206+
MP_WEAK NORETURN
207+
void common_hal_socketpool_socketpool_raise_gaierror(int value, qstr name) {
208+
mp_obj_t exc_args[2] = {
209+
MP_OBJ_NEW_SMALL_INT(value),
210+
MP_OBJ_NEW_QSTR(name),
211+
};
212+
nlr_raise(mp_obj_new_exception_args(&mp_type_gaierror, 2, exc_args));
213+
}

shared-bindings/socketpool/SocketPool.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,27 @@ typedef enum {
5252
SOCKETPOOL_TCP_NODELAY = 1,
5353
} socketpool_socketpool_tcpopt_t;
5454

55+
typedef enum {
56+
SOCKETPOOL_EAI_NONAME = -2,
57+
} socketpool_eai_t;
58+
5559
void common_hal_socketpool_socketpool_construct(socketpool_socketpool_obj_t *self, mp_obj_t radio);
5660

5761
socketpool_socket_obj_t *common_hal_socketpool_socket(socketpool_socketpool_obj_t *self,
5862
socketpool_socketpool_addressfamily_t family, socketpool_socketpool_sock_t type);
5963

6064
mp_obj_t common_hal_socketpool_socketpool_gethostbyname(socketpool_socketpool_obj_t *self,
6165
const char *host);
66+
// raises an exception instead of returning mp_const_none in the case of error
67+
mp_obj_t common_hal_socketpool_socketpool_gethostbyname_raise(socketpool_socketpool_obj_t *self,
68+
const char *host);
6269

6370
// Non-allocating version for internal use. These sockets are not registered and, therefore, not
6471
// closed automatically.
6572
bool socketpool_socket(socketpool_socketpool_obj_t *self,
6673
socketpool_socketpool_addressfamily_t family, socketpool_socketpool_sock_t type,
6774
socketpool_socket_obj_t *sock);
6875

76+
NORETURN void common_hal_socketpool_socketpool_raise_gaierror(int value, qstr name);
77+
6978
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_SOCKETPOOL_SOCKETPOOL_H

0 commit comments

Comments
 (0)