Skip to the content.

network

import "network" as network

Provides TCP networking support, including TCP servers, clients, sending and receiving data, and socket configuration.

Socket errors

Network failures raise network.SocketError.

try do
    let client = network.tcp_client("example.com", 80)
catch network.SocketError as e do
    term.log("Connection failed")

network.tcp(port)

Creates a TCP server socket listening on the specified port.

let server = network.tcp(8080)

Connections can be accepted using accept():

let connection = server.accept()

network.tcp.accept()

Waits for and accepts an incoming TCP connection.

Returns a tcp_connection object.

let server = network.tcp(8080)

let client = server.accept()

network.tcp_client(host, port)

Connects to a TCP server.

let client = network.tcp_client("localhost", 8080)

The returned object can send and receive data.

Sending and receiving data

send(buffer)

Sends raw data through the socket.

client.send(buffer)

Returns the number of bytes sent.

send_string(string)

Sends a string through the socket.

client.send_string("Hello, server!")

Returns the number of bytes sent.

recv(buffer)

Receives data into a buffer.

client.recv(buffer)

Returns the number of bytes received.

recv_string(size)

Receives up to size bytes and returns them as a string.

let message = client.recv_string(1024)

peek(buffer)

Reads data without removing it from the socket receive buffer.

client.peek(buffer)

Polling

Sockets can be checked for readiness using poll().

poll(want_read, want_write, timeout_ms)

Waits until a socket is ready for reading or writing.

Returns a bitmask containing one or more of:

Constant Value Meaning
NET_POLL_READ 1 Socket is ready for reading
NET_POLL_WRITE 2 Socket is ready for writing

A return value of 0 indicates that the timeout expired.

A return value of -1 indicates an error.

Example:

let result = client.poll(true, false, 1000)

if (result & network.NET_POLL_READ) do
    let data = client.recv_string(1024)

A timeout of -1 blocks indefinitely.

Non-blocking sockets

set_nonblocking(enable)

Enables or disables non-blocking mode.

client.set_nonblocking(true)

When enabled, socket operations return immediately instead of waiting.

Socket options

set_opt(option, value)

Sets a socket option.

Available options:

Constant Meaning
NET_OPT_KEEPALIVE Enable TCP keepalive
NET_OPT_NODELAY Disable Nagle’s algorithm
NET_OPT_REUSEADDR Allow address reuse
NET_OPT_RCVTIMEO Set receive timeout
NET_OPT_SNDTIMEO Set send timeout

Example:

client.set_opt(network.NET_OPT_NODELAY, true)

Closing sockets

close()

Closes the socket and releases its resources.

client.close()
server.close()

Example TCP server

let server = network.tcp(8080)

while true do
    let connection = server.accept()

    let message = connection.recv_string(1024)
    connection.send_string("Received: " + message)

    connection.close()

Example TCP client

let client = network.tcp_client("localhost", 8080)

client.send_string("Hello!")

let response = client.recv_string(1024)

term.log(response)

client.close()

Next