Skip to content

Commit 192172f

Browse files
committed
Refactor the sockets_utils.h headers
This commit refactors the helpers for TCP/UDP which predated much of the work around WASIp2-natively-in-libc. Changes here are: * Helpers to use `__wasilibc_*` prefix that many other internal functions in wasi-libc use. * Helpers directly set `errno` instead of returning a `bool` and requiring the caller to set `errno`. * Some helpers were renamed/tweaked to be a bit more idiomatic with C.
1 parent 3fb7ebd commit 192172f

File tree

9 files changed

+192
-275
lines changed

9 files changed

+192
-275
lines changed

expected/wasm32-wasip2/defined-symbols.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -290,16 +290,7 @@ __uselocale
290290
__utc
291291
__wasi_init_tp
292292
__wasi_sockets_services_db
293-
__wasi_sockets_utils__any_addr
294293
__wasi_sockets_utils__borrow_network
295-
__wasi_sockets_utils__get_service_entry_by_name
296-
__wasi_sockets_utils__get_service_entry_by_port
297-
__wasi_sockets_utils__map_error
298-
__wasi_sockets_utils__output_addr_validate
299-
__wasi_sockets_utils__output_addr_write
300-
__wasi_sockets_utils__parse_address
301-
__wasi_sockets_utils__parse_port
302-
__wasi_sockets_utils__posix_family
303294
__wasilibc_access
304295
__wasilibc_add_file
305296
__wasilibc_add_tcp_socket
@@ -314,12 +305,15 @@ __wasilibc_find_abspath
314305
__wasilibc_find_relpath
315306
__wasilibc_find_relpath_alloc
316307
__wasilibc_get_environ
308+
__wasilibc_get_service_entry_by_name
309+
__wasilibc_get_service_entry_by_port
317310
__wasilibc_iftodt
318311
__wasilibc_init_stdio
319312
__wasilibc_initialize_environ
320313
__wasilibc_link
321314
__wasilibc_link_newat
322315
__wasilibc_link_oldat
316+
__wasilibc_map_socket_error
323317
__wasilibc_maybe_reinitialize_environ_eagerly
324318
__wasilibc_nocwd___wasilibc_rmdirat
325319
__wasilibc_nocwd___wasilibc_unlinkat
@@ -335,6 +329,7 @@ __wasilibc_nocwd_scandirat
335329
__wasilibc_nocwd_symlinkat
336330
__wasilibc_nocwd_utimensat
337331
__wasilibc_open_nomode
332+
__wasilibc_parse_port
338333
__wasilibc_poll_add
339334
__wasilibc_poll_ready
340335
__wasilibc_populate_preopens
@@ -345,10 +340,15 @@ __wasilibc_rename_newat
345340
__wasilibc_rename_oldat
346341
__wasilibc_reset_preopens
347342
__wasilibc_rmdirat
343+
__wasilibc_sockaddr_to_wasi
344+
__wasilibc_sockaddr_validate
348345
__wasilibc_stat
349346
__wasilibc_tell
350347
__wasilibc_unlinkat
348+
__wasilibc_unspecified_addr
351349
__wasilibc_utimens
350+
__wasilibc_wasi_family_to_libc
351+
__wasilibc_wasi_to_sockaddr
352352
__wasilibc_write_stream
353353
__wasm_call_dtors
354354
__wcscoll_l

expected/wasm32-wasip3/defined-symbols.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -289,15 +289,6 @@ __uselocale
289289
__utc
290290
__wasi_init_tp
291291
__wasi_sockets_services_db
292-
__wasi_sockets_utils__any_addr
293-
__wasi_sockets_utils__get_service_entry_by_name
294-
__wasi_sockets_utils__get_service_entry_by_port
295-
__wasi_sockets_utils__map_error
296-
__wasi_sockets_utils__output_addr_validate
297-
__wasi_sockets_utils__output_addr_write
298-
__wasi_sockets_utils__parse_address
299-
__wasi_sockets_utils__parse_port
300-
__wasi_sockets_utils__posix_family
301292
__wasilibc_access
302293
__wasilibc_add_file
303294
__wasilibc_add_tcp_socket
@@ -312,12 +303,15 @@ __wasilibc_find_abspath
312303
__wasilibc_find_relpath
313304
__wasilibc_find_relpath_alloc
314305
__wasilibc_get_environ
306+
__wasilibc_get_service_entry_by_name
307+
__wasilibc_get_service_entry_by_port
315308
__wasilibc_iftodt
316309
__wasilibc_init_stdio
317310
__wasilibc_initialize_environ
318311
__wasilibc_link
319312
__wasilibc_link_newat
320313
__wasilibc_link_oldat
314+
__wasilibc_map_socket_error
321315
__wasilibc_maybe_reinitialize_environ_eagerly
322316
__wasilibc_nocwd___wasilibc_rmdirat
323317
__wasilibc_nocwd___wasilibc_unlinkat
@@ -333,6 +327,7 @@ __wasilibc_nocwd_scandirat
333327
__wasilibc_nocwd_symlinkat
334328
__wasilibc_nocwd_utimensat
335329
__wasilibc_open_nomode
330+
__wasilibc_parse_port
336331
__wasilibc_populate_preopens
337332
__wasilibc_pthread_self
338333
__wasilibc_random
@@ -341,10 +336,15 @@ __wasilibc_rename_newat
341336
__wasilibc_rename_oldat
342337
__wasilibc_reset_preopens
343338
__wasilibc_rmdirat
339+
__wasilibc_sockaddr_to_wasi
340+
__wasilibc_sockaddr_validate
344341
__wasilibc_stat
345342
__wasilibc_tell
346343
__wasilibc_unlinkat
344+
__wasilibc_unspecified_addr
347345
__wasilibc_utimens
346+
__wasilibc_wasi_family_to_libc
347+
__wasilibc_wasi_to_sockaddr
348348
__wasilibc_write_stream3
349349
__wasm_call_dtors
350350
__wcscoll_l

libc-bottom-half/headers/private/wasi/sockets_utils.h

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,36 @@ typedef enum {
5555
network_borrow_network_t __wasi_sockets_utils__borrow_network();
5656
#endif
5757

58-
int __wasi_sockets_utils__map_error(sockets_error_code_t wasi_error);
59-
bool __wasi_sockets_utils__parse_address(
58+
int __wasilibc_map_socket_error(sockets_error_code_t wasi_error);
59+
60+
static inline int __wasilibc_socket_error_to_errno(sockets_error_code_t wasi_error) {
61+
errno = __wasilibc_map_socket_error(wasi_error);
62+
return -1;
63+
}
64+
65+
// Conversion from a libc-based `sockaddr` + `socklen_t` to a WASI address.
66+
int __wasilibc_sockaddr_to_wasi(
6067
sockets_ip_address_family_t expected_family,
6168
const struct sockaddr *address, socklen_t len,
62-
sockets_ip_socket_address_t *result, int *error);
63-
bool __wasi_sockets_utils__output_addr_validate(
69+
sockets_ip_socket_address_t *result);
70+
71+
// Conversion from a WASI address to a libc-based `sockaddr`.
72+
//
73+
// This is done in two stages. First the user-provided `sockaddr` is validated
74+
// along with its lenght to ensure it's large enough to hold `expected_family`.
75+
// Next once the address is available `__wasilibc_wasi_to_sockaddr` is used
76+
// to write the output value.
77+
int __wasilibc_sockaddr_validate(
6478
sockets_ip_address_family_t expected_family, struct sockaddr *addr,
6579
socklen_t *addrlen, output_sockaddr_t *result);
66-
void __wasi_sockets_utils__output_addr_write(
80+
void __wasilibc_wasi_to_sockaddr(
6781
const sockets_ip_socket_address_t input, output_sockaddr_t *output);
68-
int __wasi_sockets_utils__posix_family(sockets_ip_address_family_t wasi_family);
69-
sockets_ip_socket_address_t __wasi_sockets_utils__any_addr(sockets_ip_address_family_t family);
70-
int __wasi_sockets_utils__parse_port(const char *port);
71-
const service_entry_t *__wasi_sockets_utils__get_service_entry_by_name(const char *name);
72-
const service_entry_t *__wasi_sockets_utils__get_service_entry_by_port(const uint16_t port);
82+
83+
int __wasilibc_wasi_family_to_libc(sockets_ip_address_family_t wasi_family);
84+
void __wasilibc_unspecified_addr(sockets_ip_address_family_t family, sockets_ip_socket_address_t *out);
85+
int __wasilibc_parse_port(const char *port);
86+
const service_entry_t *__wasilibc_get_service_entry_by_name(const char *name);
87+
const service_entry_t *__wasilibc_get_service_entry_by_port(const uint16_t port);
7388

7489
#endif // not(__wasip1__)
7590

libc-bottom-half/sources/netdb.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ static int map_error(ip_name_lookup_error_code_t error) {
2626
return EAI_FAIL;
2727

2828
default:
29-
errno = __wasi_sockets_utils__map_error(error);
29+
__wasilibc_socket_error_to_errno(error);
3030
return EAI_SYSTEM;
3131
}
3232
}
@@ -185,10 +185,10 @@ int getaddrinfo(const char *restrict host, const char *restrict serv,
185185
int port = 0;
186186
uint16_t protocol = SERVICE_PROTOCOL_TCP;
187187
if (serv != NULL) {
188-
port = __wasi_sockets_utils__parse_port(serv);
188+
port = __wasilibc_parse_port(serv);
189189
if (port < 0) {
190190
const service_entry_t *service =
191-
__wasi_sockets_utils__get_service_entry_by_name(serv);
191+
__wasilibc_get_service_entry_by_name(serv);
192192
if (service) {
193193
port = service->port;
194194
protocol = service->protocol;
@@ -271,8 +271,7 @@ const char *hstrerror(int err) {
271271
}
272272

273273
struct servent *getservbyname(const char *name, const char *proto) {
274-
const service_entry_t *entry =
275-
__wasi_sockets_utils__get_service_entry_by_name(name);
274+
const service_entry_t *entry = __wasilibc_get_service_entry_by_name(name);
276275
if (!set_global_serv_entry(entry, proto)) {
277276
return NULL;
278277
}
@@ -281,7 +280,7 @@ struct servent *getservbyname(const char *name, const char *proto) {
281280

282281
struct servent *getservbyport(int port, const char *proto) {
283282
const service_entry_t *entry =
284-
__wasi_sockets_utils__get_service_entry_by_port(htons(port));
283+
__wasilibc_get_service_entry_by_port(htons(port));
285284
if (!set_global_serv_entry(entry, proto)) {
286285
return NULL;
287286
}

libc-bottom-half/sources/socket.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,17 @@
1515
static int tcp_socket(sockets_ip_address_family_t family, bool blocking) {
1616
sockets_error_code_t error;
1717
sockets_own_tcp_socket_t socket;
18-
if (!sockets_static_tcp_socket_create(family, &socket, &error)) {
19-
errno = __wasi_sockets_utils__map_error(error);
20-
return -1;
21-
}
18+
if (!sockets_static_tcp_socket_create(family, &socket, &error))
19+
return __wasilibc_socket_error_to_errno(error);
2220

2321
return __wasilibc_add_tcp_socket(socket, family, blocking);
2422
}
2523

2624
static int udp_socket(sockets_ip_address_family_t family, bool blocking) {
2725
sockets_error_code_t error;
2826
sockets_own_udp_socket_t socket;
29-
if (!sockets_static_udp_socket_create(family, &socket, &error)) {
30-
errno = __wasi_sockets_utils__map_error(error);
31-
return -1;
32-
}
27+
if (!sockets_static_udp_socket_create(family, &socket, &error))
28+
return __wasilibc_socket_error_to_errno(error);
3329

3430
return __wasilibc_add_udp_socket(socket, family, blocking);
3531
}

0 commit comments

Comments
 (0)