mirror of
https://git.proxmox.com/git/wasi-libc
synced 2025-08-03 23:09:50 +00:00

* 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>
54 lines
1.6 KiB
C
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
|