Invisible link to canonical for Microformats

tcp (slug.io)


slug.io.tcp

slug.io.tcp — low-level TCP networking

Raw TCP socket operations for building servers and clients. Connection and listener handles are numeric values — always close them when done.

TCP server example

val { bind, accept, read, write, close } = import("slug.io.tcp")

val listener = bind("0.0.0.0", 8080)
defer close(listener)

nursery {
  spawn {
    val conn = accept(listener)
    defer close(conn)
    val data = read(conn, 4096)
    write(conn, "HTTP/1.1 200 OK\r\n\r\nHello!")
  }
}

TCP client example

val conn = connect("example.com", 80)
defer close(conn)
write(conn, "GET / HTTP/1.0\r\n\r\n")
val response = read(conn, 4096)

For HTTP use cases, prefer slug.io.http. For web servers, prefer slug.web.server.

@effects(‘io net’)

TOC

Functions

accept(listener)

fn slug.io.tcp#accept(@num listener) -> @num

waits for an incoming connection on listener and returns a connection handle.

Blocks until a client connects. Use in a spawn or nursery block for concurrent connection handling.

@effects(‘io net’)

Parameter Type Default
listener @num

bind(addr, port)

fn slug.io.tcp#bind(@str addr, @num port) -> @num

binds a TCP listener to addr:port and returns a listener handle.

Use accept to wait for incoming connections. Use defer close(listener) to release the port when done.

@effects(‘io net’)

Parameter Type Default
addr @str
port @num

close(handle)

fn slug.io.tcp#close(@num handle) -> @num

closes a TCP listener or connection handle.

@effects(‘io net’)

Parameter Type Default
handle @num

connect(addr, port)

fn slug.io.tcp#connect(@str addr, @num port) -> @num

connects to a TCP server at addr:port and returns a connection handle.

Use defer close(conn) to release the connection.

@effects(‘io net’)

Parameter Type Default
addr @str
port @num

read(stream, maxBytes)

fn slug.io.tcp#read(@num stream, @num maxBytes) -> @str

reads up to maxBytes from a TCP stream.

Returns the data read as a string, or nil on EOF.

@effects(‘io net’)

Parameter Type Default
stream @num
maxBytes @num

write(stream, data)

fn slug.io.tcp#write(@num stream, @str data) -> @num

sends data over a TCP stream.

Returns the number of bytes written.

@effects(‘io net’)

Parameter Type Default
stream @num
data @str