wasi-libc/libc-bottom-half/headers/private/wasi/sockets_utils.h
Joel Dice 684f155664
implement basic TCP/UDP client support (#477)
* implement basic TCP/UDP client support

This implements `socket`, `connect`, `recv`, `send`, etc. in terms of
`wasi-sockets` for the `wasm32-wasip2` target.

I've introduced a new public header file: `__wasi_snapshot.h`, which will define
a preprocessor symbol `__wasilibc_use_wasip2` if using the `wasm32-wasip2`
version of the header, in which case we provide features only available for that
target.

Co-authored-by: Dave Bakker <github@davebakker.io>
Signed-off-by: Joel Dice <joel.dice@fermyon.com>

* fix grammar in __wasi_snapshot.h comment

Co-authored-by: Dan Gohman <dev@sunfishcode.online>
Signed-off-by: Joel Dice <joel.dice@fermyon.com>

---------

Signed-off-by: Joel Dice <joel.dice@fermyon.com>
Co-authored-by: Dave Bakker <github@davebakker.io>
Co-authored-by: Dan Gohman <dev@sunfishcode.online>
2024-03-13 10:59:27 -07:00

54 lines
1.6 KiB
C

#ifndef __wasi_sockets_utils_h
#define __wasi_sockets_utils_h
#include <netinet/in.h>
#include <wasi/descriptor_table.h>
typedef struct {
enum {
OUTPUT_SOCKADDR_NULL,
OUTPUT_SOCKADDR_V4,
OUTPUT_SOCKADDR_V6,
} tag;
union {
struct {
int dummy;
} null;
struct {
struct sockaddr_in *addr;
socklen_t *addrlen;
} v4;
struct {
struct sockaddr_in6 *addr;
socklen_t *addrlen;
} v6;
};
} output_sockaddr_t;
network_borrow_network_t __wasi_sockets_utils__borrow_network();
int __wasi_sockets_utils__map_error(network_error_code_t wasi_error);
bool __wasi_sockets_utils__parse_address(
network_ip_address_family_t expected_family,
const struct sockaddr *address, socklen_t len,
network_ip_socket_address_t *result, int *error);
bool __wasi_sockets_utils__output_addr_validate(
network_ip_address_family_t expected_family, struct sockaddr *addr,
socklen_t *addrlen, output_sockaddr_t *result);
void __wasi_sockets_utils__output_addr_write(
const network_ip_socket_address_t input, output_sockaddr_t *output);
int __wasi_sockets_utils__posix_family(network_ip_address_family_t wasi_family);
network_ip_socket_address_t
__wasi_sockets_utils__any_addr(network_ip_address_family_t family);
int __wasi_sockets_utils__tcp_bind(tcp_socket_t *socket,
network_ip_socket_address_t *address);
int __wasi_sockets_utils__udp_bind(udp_socket_t *socket,
network_ip_socket_address_t *address);
bool __wasi_sockets_utils__stream(udp_socket_t *socket,
network_ip_socket_address_t *remote_address,
udp_socket_streams_t *result,
network_error_code_t *error);
void __wasi_sockets_utils__drop_streams(udp_socket_streams_t streams);
#endif