3.4 KiB
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()