Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

std.socket

Low-level TCP socket operations. For higher-level HTTP, use std.http or std.net.

import std.socket

Functions

create

socket.create(domain: int, sock_type: int, protocol: int) int

Creates a socket and returns a file descriptor. Use domain 2 (AF_INET), sock_type 1 (SOCK_STREAM), protocol 0.

bind

socket.bind(fd: int, host: string, port: int) int

Binds a socket to an address and port.

listen

socket.listen(fd: int, backlog: int) int

Marks a socket as listening for incoming connections.

accept

socket.accept(fd: int) int

Accepts a connection and returns a new file descriptor for the client.

connect

socket.connect(fd: int, host: string, port: int) int

Connects to a remote host.

read

socket.read(fd: int, max_bytes: int) string

Reads up to max_bytes from a socket.

write

socket.write(fd: int, data: string) int

Writes data to a socket. Returns number of bytes written.

read_bytes / write_bytes

socket.read_bytes(fd: int, max_bytes: int) bytes
socket.write_bytes(fd: int, data: bytes) int

Binary-safe variants of read and write. read_bytes returns empty bytes on EOF or error.

set_read_timeout / read_timed_out

socket.set_read_timeout(fd: int, ms: int) int
socket.read_timed_out() int

set_read_timeout sets a read deadline (SO_RCVTIMEO): later reads block at most ms milliseconds, and ms <= 0 clears it. After a read comes back empty, read_timed_out() returns 1 if the deadline elapsed and 0 for EOF or a connection error.

close

socket.close(fd: int) int

Closes a socket.

set_reuseaddr

socket.set_reuseaddr(fd: int) int

Sets the SO_REUSEADDR option on a socket.

get_port

socket.get_port(fd: int) int

Returns the port number a socket is bound to.

Example

import std.socket

fn main() {
    let fd = socket.create(2, 1, 0)
    socket.set_reuseaddr(fd)
    socket.bind(fd, "0.0.0.0", 8080)
    socket.listen(fd, 128)
    print("Listening on :8080")
    let client = socket.accept(fd)
    let data = socket.read(client, 4096)
    print(f"Received: {data}")
    socket.close(client)
    socket.close(fd)
}