Net
The Net module provides TCP and UDP networking for Kit. It includes socket operations for both connection-oriented (TCP) and connectionless (UDP) protocols, enabling server and client network communication.
Network builtins require authority in scope. Outbound TCP and HTTP calls require
TCPConnectAuth, TCPAuth, NetAuth, or RootAuth;
listening sockets require TCPListenAuth; UDP helpers require UDPAuth.
TCP Functions
The TCP functions provide connection-oriented socket networking.
match Net.tcp-connect "localhost" 8080
| Ok socket -> println "Connected!"
| Err e -> println "Connection failed: ${e}"
match Net.tcp-listen "0.0.0.0" 8080
| Ok listener -> println "Listening on port 8080"
| Err e -> println "Failed to bind: ${e}"
UDP Functions
The UDP functions provide connectionless datagram networking.
match Net.udp-bind "0.0.0.0" 9000
| Ok socket -> println "UDP socket ready"
| Err e -> println "Failed to bind: ${e}"
Examples
TCP Echo Server
listener = match Net.tcp-listen "0.0.0.0" 8080
| Ok sock -> sock
| Err e ->
println "Failed to start server: ${e}"
exit 1
println "Echo server listening on port 8080"
loop = fn =>
client = match Net.tcp-accept listener
| Ok c -> c
| Err e ->
println "Accept failed: ${e}"
exit 1
match Net.tcp-recv client.socket 1024
| Ok data ->
Net.tcp-send client.socket data
Net.tcp-close client.socket
| Err _ ->
Net.tcp-close client.socket
loop()
loop()
TCP Client
socket = match Net.tcp-connect "localhost" 8080
| Ok sock -> sock
| Err e ->
println "Connection failed: ${e}"
exit 1
Net.tcp-send socket "Hello, server!"
match Net.tcp-recv socket 1024
| Ok response ->
println "Response: ${response}"
| Err e ->
println "Receive failed: ${e}"
Net.tcp-close socket
UDP Example
socket = match Net.udp-bind "0.0.0.0" 9000
| Ok sock -> sock
| Err e ->
println "Failed to bind: ${e}"
exit 1
Net.udp-send-to socket "localhost:9001" "Hello via UDP!"
Net.udp-close socket
Error Types
The Net module exports a NetError type for networking-specific errors.
type NetError =
| TCPListenError{message: String}
| TCPConnectionError{message: String}
| TCPAcceptError{message: String}
| TCPSendError{message: String}
| TCPRecvError{message: String}
| UDPBindError{message: String}
| UDPConnectionError{message: String}
| UDPSendError{message: String}
| UDPRecvError{message: String}
| SocketError{message: String}
Handling Network Errors
match Net.tcp-connect "localhost" 8080
| Ok socket -> println "Connected!"
| Err (TCPConnectionError{message}) ->
println "Connection error: ${message}"
| Err (TCPSendError{message}) ->
println "Send error: ${message}"
| Err (TCPRecvError{message}) ->
println "Receive error: ${message}"
| Err e ->
println "Error: ${e}"