Net API Reference

TCP/UDP socket networking with IPv4 and IPv6 support

Import

U std/net

Constants

Error Codes

ConstantValueDescription
NET_ERR_NONE0Success
NET_ERR_SOCKET-1Socket creation failed
NET_ERR_BIND-2Bind failed
NET_ERR_LISTEN-3Listen failed
NET_ERR_ACCEPT-4Accept failed
NET_ERR_CONNECT-5Connect failed
NET_ERR_SEND-6Send failed
NET_ERR_RECV-7Receive failed
NET_ERR_CLOSE-8Close failed
NET_ERR_INVALID-9Invalid argument
NET_ERR_RESOLVE-10Address resolution failed
NET_ERR_INVALID_PORT-11Invalid port number
NET_ERR_INVALID_BUFFER-12Invalid buffer

Socket Constants

ConstantValueDescription
AF_INET2IPv4 address family
AF_INET630IPv6 address family
SOCK_STREAM1TCP socket type
SOCK_DGRAM2UDP socket type
MIN_PORT0Minimum port number
MAX_PORT65535Maximum port number

Structs

TcpListener

TCP server socket for accepting connections.

MethodSignatureDescription
bindF bind(port: i64) -> TcpListenerBind IPv4 listener
bind6F bind6(port: i64) -> TcpListenerBind IPv6 listener
is_validF is_valid(&self) -> i64Check if listener is valid
acceptF accept(&self) -> TcpStreamAccept connection
get_portF get_port(&self) -> i64Get listening port
closeF close(&self) -> i64Close listener
dropF drop(&self) -> i64Close listener (RAII)

TcpStream

TCP connection for reading/writing data.

MethodSignatureDescription
connectF connect(host: i64, port: i64) -> TcpStreamConnect IPv4
connect6F connect6(host: i64, port: i64) -> TcpStreamConnect IPv6
is_validF is_valid(&self) -> i64Check if stream is valid
readF read(&self, buffer: i64, len: i64) -> i64Read data
writeF write(&self, data: i64, len: i64) -> i64Write data
write_allF write_all(&self, data: i64, len: i64) -> i64Write all data
get_fdF get_fd(&self) -> i64Get file descriptor
closeF close(&self) -> i64Close connection
dropF drop(&self) -> i64Close connection (RAII)

UdpSocket

UDP socket for connectionless datagram I/O.

MethodSignatureDescription
newF new() -> UdpSocketCreate unbound IPv4 socket
new6F new6() -> UdpSocketCreate unbound IPv6 socket
bindF bind(port: i64) -> UdpSocketBind IPv4 socket
bind6F bind6(port: i64) -> UdpSocketBind IPv6 socket
is_validF is_valid(&self) -> i64Check if socket is valid
send_toF send_to(&self, data: i64, len: i64, host: i64, port: i64) -> i64Send datagram (IPv4)
send_to6F send_to6(&self, data: i64, len: i64, host: i64, port: i64) -> i64Send datagram (IPv6)
recvF recv(&self, buffer: i64, len: i64) -> i64Receive datagram
recv_fromF recv_from(&self, buffer: i64, len: i64, src_addr_out: i64, src_port_out: i64) -> i64Receive with source (IPv4)
recv_from6F recv_from6(&self, buffer: i64, len: i64, src_addr_out: i64, src_port_out: i64) -> i64Receive with source (IPv6)
get_portF get_port(&self) -> i64Get bound port
get_fdF get_fd(&self) -> i64Get file descriptor
closeF close(&self) -> i64Close socket
dropF drop(&self) -> i64Close socket (RAII)

Convenience Functions

TCP Functions

FunctionDescription
tcp_listen(port)Create TCP listener (IPv4), returns fd
tcp_listen6(port)Create TCP listener (IPv6), returns fd
tcp_listen_result(port)Create TCP listener with Result (IPv4)
tcp_listen6_result(port)Create TCP listener with Result (IPv6)
tcp_accept(listener_fd)Accept connection, returns client fd
tcp_accept_result(listener_fd)Accept connection with Result
tcp_close_listener(listener_fd)Close TCP listener
tcp_connect(host, port)Connect to TCP server (IPv4), returns fd
tcp_connect6(host, port)Connect to TCP server (IPv6), returns fd
tcp_connect_result(host, port)Connect with Result (IPv4)
tcp_connect6_result(host, port)Connect with Result (IPv6)
tcp_read(fd, buffer, len)Read from TCP socket
tcp_write(fd, data, len)Write to TCP socket
tcp_close(fd)Close TCP socket

UDP Functions

FunctionDescription
udp_bind(port)Bind UDP socket (IPv4), returns fd
udp_bind6(port)Bind UDP socket (IPv6), returns fd
udp_send_to(fd, data, len, host, port)Send UDP datagram (IPv4)
udp_send_to6(fd, data, len, host, port)Send UDP datagram (IPv6)
udp_recv_from(fd, buffer, len)Receive UDP datagram
udp_close(fd)Close UDP socket

Utility Functions

FunctionDescription
is_valid_ip(host)Check if IPv4 address is valid
is_valid_ip6(host)Check if IPv6 address is valid
net_error_string(err)Convert error code to string

Usage

U std/net

# TCP Server
listener := TcpListener.bind(8080)
client := listener.accept()
buf := malloc(1024)
n := client.read(buf, 1024)
client.close()
listener.close()