socket
Socket networking bindings for ESP32 Provides low-level socket operations for TCP/UDP communication
- AssemblyScript
- Zig
- Rust
- TinyGo
- C
- C++
export enum AddressFamily {
Ipv4 = 0,
Ipv6 = 1
}
export enum SocketType {
Stream = 0,
Dgram = 1,
Raw = 2
}
export enum SocketProtocol {
Default = 0,
Tcp = 1,
Udp = 2,
Icmp = 3
}
export enum SocketError {
Ok = 0,
InvalidArg = 1,
ConnectionRefused = 2,
Timeout = 3,
NetworkUnreachable = 4,
HostUnreachable = 5,
ConnectionReset = 6,
WouldBlock = 7
}
// @ts-ignore
@external("socket", "socketaddr_create")
export declare function socketaddrCreate(): u32;
// @ts-ignore
@external("socket", "socketaddr_set_port")
export declare function socketaddrSetPort(addr: u32, port: i32): void;
// @ts-ignore
@external("socket", "socketaddr_set_host")
export declare function socketaddrSetHost(addr: u32, host: u32): void;
// @ts-ignore
@external("socket", "socketaddr_set_family")
export declare function socketaddrSetFamily(addr: u32, family: i32): void;
// @ts-ignore
@external("socket", "socketaddr_destroy")
export declare function socketaddrDestroy(addr: u32): void;
// @ts-ignore
@external("socket", "socket_create")
export declare function socketCreate(domain: i32, type: i32, protocol: i32): i32;
// @ts-ignore
@external("socket", "socket_connect")
export declare function socketConnect(sockfd: i32, addr: u32): i32;
// @ts-ignore
@external("socket", "socket_send")
export declare function socketSend(sockfd: i32, buffer: i32, len: i32): i32;
// @ts-ignore
@external("socket", "socket_recv")
export declare function socketRecv(sockfd: i32, buffer: i32, len: i32): i32;
// @ts-ignore
@external("socket", "socket_close")
export declare function socketClose(sockfd: i32): i32;
pub const AddressFamily = enum(u32) {
ipv4 = 0,
ipv6 = 1
};
pub const SocketType = enum(u32) {
stream = 0,
dgram = 1,
raw = 2
};
pub const SocketProtocol = enum(u32) {
default = 0,
tcp = 1,
udp = 2,
icmp = 3
};
pub const SocketError = enum(u32) {
ok = 0,
invalidArg = 1,
connectionRefused = 2,
timeout = 3,
networkUnreachable = 4,
hostUnreachable = 5,
connectionReset = 6,
wouldBlock = 7
};
pub extern "socket" fn socketaddr_create() u32;
pub extern "socket" fn socketaddr_set_port(addr: u32, port: i32) void;
pub extern "socket" fn socketaddr_set_host(addr: u32, host: u32) void;
pub extern "socket" fn socketaddr_set_family(addr: u32, family: i32) void;
pub extern "socket" fn socketaddr_destroy(addr: u32) void;
pub extern "socket" fn socket_create(domain: i32, type: i32, protocol: i32) i32;
pub extern "socket" fn socket_connect(sockfd: i32, addr: u32) i32;
pub extern "socket" fn socket_send(sockfd: i32, buffer: i32, len: i32) i32;
pub extern "socket" fn socket_recv(sockfd: i32, buffer: i32, len: i32) i32;
pub extern "socket" fn socket_close(sockfd: i32) i32;
#[derive(Debug, Clone, Copy)]
#[repr(u32)]
pub enum AddressFamily {
Ipv4 = 0,
Ipv6 = 1
}
#[derive(Debug, Clone, Copy)]
#[repr(u32)]
pub enum SocketType {
Stream = 0,
Dgram = 1,
Raw = 2
}
#[derive(Debug, Clone, Copy)]
#[repr(u32)]
pub enum SocketProtocol {
Default = 0,
Tcp = 1,
Udp = 2,
Icmp = 3
}
#[derive(Debug, Clone, Copy)]
#[repr(u32)]
pub enum SocketError {
Ok = 0,
InvalidArg = 1,
ConnectionRefused = 2,
Timeout = 3,
NetworkUnreachable = 4,
HostUnreachable = 5,
ConnectionReset = 6,
WouldBlock = 7
}
#[link(wasm_import_module = "socket")]
extern "C" {
#[link_name = "socketaddr_create"]
fn unsafe_socketaddr_create() -> u32;
#[link_name = "socketaddr_set_port"]
fn unsafe_socketaddr_set_port(addr: u32, port: i32);
#[link_name = "socketaddr_set_host"]
fn unsafe_socketaddr_set_host(addr: u32, host: u32);
#[link_name = "socketaddr_set_family"]
fn unsafe_socketaddr_set_family(addr: u32, family: i32);
#[link_name = "socketaddr_destroy"]
fn unsafe_socketaddr_destroy(addr: u32);
#[link_name = "socket_create"]
fn unsafe_socket_create(domain: i32, type: i32, protocol: i32) -> i32;
#[link_name = "socket_connect"]
fn unsafe_socket_connect(sockfd: i32, addr: u32) -> i32;
#[link_name = "socket_send"]
fn unsafe_socket_send(sockfd: i32, buffer: i32, len: i32) -> i32;
#[link_name = "socket_recv"]
fn unsafe_socket_recv(sockfd: i32, buffer: i32, len: i32) -> i32;
#[link_name = "socket_close"]
fn unsafe_socket_close(sockfd: i32) -> i32;
}
pub fn socketaddr_create() -> u32 {
unsafe {
return unsafe_socketaddr_create();
}
}
pub fn socketaddr_set_port(addr: u32, port: i32) {
unsafe {
unsafe_socketaddr_set_port(addr, port);
}
}
pub fn socketaddr_set_host(addr: u32, host: u32) {
unsafe {
unsafe_socketaddr_set_host(addr, host);
}
}
pub fn socketaddr_set_family(addr: u32, family: i32) {
unsafe {
unsafe_socketaddr_set_family(addr, family);
}
}
pub fn socketaddr_destroy(addr: u32) {
unsafe {
unsafe_socketaddr_destroy(addr);
}
}
pub fn socket_create(domain: i32, type: i32, protocol: i32) -> i32 {
unsafe {
return unsafe_socket_create(domain, type, protocol);
}
}
pub fn socket_connect(sockfd: i32, addr: u32) -> i32 {
unsafe {
return unsafe_socket_connect(sockfd, addr);
}
}
pub fn socket_send(sockfd: i32, buffer: i32, len: i32) -> i32 {
unsafe {
return unsafe_socket_send(sockfd, buffer, len);
}
}
pub fn socket_recv(sockfd: i32, buffer: i32, len: i32) -> i32 {
unsafe {
return unsafe_socket_recv(sockfd, buffer, len);
}
}
pub fn socket_close(sockfd: i32) -> i32 {
unsafe {
return unsafe_socket_close(sockfd);
}
}
package socket
type AddressFamily uint32
const (
Ipv4 AddressFamily = 0
Ipv6 AddressFamily = 1
)
type SocketType uint32
const (
Stream SocketType = 0
Dgram SocketType = 1
Raw SocketType = 2
)
type SocketProtocol uint32
const (
Default SocketProtocol = 0
Tcp SocketProtocol = 1
Udp SocketProtocol = 2
Icmp SocketProtocol = 3
)
type SocketError uint32
const (
Ok SocketError = 0
InvalidArg SocketError = 1
ConnectionRefused SocketError = 2
Timeout SocketError = 3
NetworkUnreachable SocketError = 4
HostUnreachable SocketError = 5
ConnectionReset SocketError = 6
WouldBlock SocketError = 7
)
//go:wasmimport socket socketaddr_create
func SocketaddrCreate() uint32;
//go:wasmimport socket socketaddr_set_port
func SocketaddrSetPort(Addr uint32, Port int32);
//go:wasmimport socket socketaddr_set_host
func SocketaddrSetHost(Addr uint32, Host uint32);
//go:wasmimport socket socketaddr_set_family
func SocketaddrSetFamily(Addr uint32, Family int32);
//go:wasmimport socket socketaddr_destroy
func SocketaddrDestroy(Addr uint32);
//go:wasmimport socket socket_create
func SocketCreate(Domain int32, Type int32, Protocol int32) int32;
//go:wasmimport socket socket_connect
func SocketConnect(Sockfd int32, Addr uint32) int32;
//go:wasmimport socket socket_send
func SocketSend(Sockfd int32, Buffer int32, Len int32) int32;
//go:wasmimport socket socket_recv
func SocketRecv(Sockfd int32, Buffer int32, Len int32) int32;
//go:wasmimport socket socket_close
func SocketClose(Sockfd int32) int32;
typedef enum {
ADDRESS_FAMILY_IPV4,
ADDRESS_FAMILY_IPV6
} address_family_t;
typedef enum {
SOCKET_TYPE_STREAM,
SOCKET_TYPE_DGRAM,
SOCKET_TYPE_RAW
} socket_type_t;
typedef enum {
SOCKET_PROTOCOL_DEFAULT,
SOCKET_PROTOCOL_TCP,
SOCKET_PROTOCOL_UDP,
SOCKET_PROTOCOL_ICMP
} socket_protocol_t;
typedef enum {
SOCKET_ERROR_OK,
SOCKET_ERROR_INVALID_ARG,
SOCKET_ERROR_CONNECTION_REFUSED,
SOCKET_ERROR_TIMEOUT,
SOCKET_ERROR_NETWORK_UNREACHABLE,
SOCKET_ERROR_HOST_UNREACHABLE,
SOCKET_ERROR_CONNECTION_RESET,
SOCKET_ERROR_WOULD_BLOCK
} socket_error_t;
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_create")))
extern unsigned int socketaddr_create();
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_set_port")))
extern void socketaddr_set_port(unsigned int addr, int port);
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_set_host")))
extern void socketaddr_set_host(unsigned int addr, unsigned int host);
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_set_family")))
extern void socketaddr_set_family(unsigned int addr, int family);
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_destroy")))
extern void socketaddr_destroy(unsigned int addr);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_create")))
extern int socket_create(int domain, int type, int protocol);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_connect")))
extern int socket_connect(int sockfd, unsigned int addr);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_send")))
extern int socket_send(int sockfd, int buffer, int len);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_recv")))
extern int socket_recv(int sockfd, int buffer, int len);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_close")))
extern int socket_close(int sockfd);
typedef enum {
ADDRESS_FAMILY_IPV4,
ADDRESS_FAMILY_IPV6
} address_family_t;
typedef enum {
SOCKET_TYPE_STREAM,
SOCKET_TYPE_DGRAM,
SOCKET_TYPE_RAW
} socket_type_t;
typedef enum {
SOCKET_PROTOCOL_DEFAULT,
SOCKET_PROTOCOL_TCP,
SOCKET_PROTOCOL_UDP,
SOCKET_PROTOCOL_ICMP
} socket_protocol_t;
typedef enum {
SOCKET_ERROR_OK,
SOCKET_ERROR_INVALID_ARG,
SOCKET_ERROR_CONNECTION_REFUSED,
SOCKET_ERROR_TIMEOUT,
SOCKET_ERROR_NETWORK_UNREACHABLE,
SOCKET_ERROR_HOST_UNREACHABLE,
SOCKET_ERROR_CONNECTION_RESET,
SOCKET_ERROR_WOULD_BLOCK
} socket_error_t;
extern "C" {
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_create")))
extern unsigned int socketaddr_create();
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_set_port")))
extern void socketaddr_set_port(unsigned int addr, int port);
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_set_host")))
extern void socketaddr_set_host(unsigned int addr, unsigned int host);
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_set_family")))
extern void socketaddr_set_family(unsigned int addr, int family);
__attribute__((import_module("socket")))
__attribute__((import_name("socketaddr_destroy")))
extern void socketaddr_destroy(unsigned int addr);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_create")))
extern int socket_create(int domain, int type, int protocol);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_connect")))
extern int socket_connect(int sockfd, unsigned int addr);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_send")))
extern int socket_send(int sockfd, int buffer, int len);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_recv")))
extern int socket_recv(int sockfd, int buffer, int len);
__attribute__((import_module("socket")))
__attribute__((import_name("socket_close")))
extern int socket_close(int sockfd);
}