Skip to content

std.net.tcp

TCP streams and listeners over socket.Socket

pub TcpStream :: struct {
sock: socket::Socket,
}

connected TCP socket

pub send :: fn(self: *Self, data: []const u8) -> usize ! NetError

may write fewer than data.len; returns bytes sent

pub send_all :: fn(self: *Self, data: []const u8) -> void ! NetError

loops over short writes; send_failed on error, closed if 0 bytes go out

pub recv :: fn(self: *Self, buf: []u8) -> usize ! NetError

returns bytes read; 0 = peer closed

pub recv_exact :: fn(self: *Self, buf: []u8) -> void ! NetError

fills buf; closed if the peer hangs up first (truncated message)

pub set_nodelay :: fn(self: *Self, on: bool) -> void ! NetError

disables Nagle: small packets go out at once

pub set_read_timeout :: fn(self: *Self, ms: i32) -> void ! NetError
pub set_write_timeout :: fn(self: *Self, ms: i32) -> void ! NetError
pub local_addr :: fn(self: *Self) -> addr::SocketAddr ! NetError
pub shutdown_write :: fn(self: *Self) -> void ! NetError

half-close: EOF to the peer, reads still work

pub close :: fn(self: *Self)
pub Accepted :: struct {
stream: TcpStream,
peer: addr::SocketAddr,
}

stream and peer address from accept

pub TcpListener :: struct {
sock: socket::Socket,
}
pub accept :: fn(self: *Self) -> Accepted ! NetError

blocks until a client connects

pub accept_stream :: fn(self: *Self) -> TcpStream ! NetError

accept without the peer address

pub local_addr :: fn(self: *Self) -> addr::SocketAddr ! NetError

bound address; resolves an ephemeral port

pub close :: fn(self: *Self)
pub connect :: fn(sa: addr::SocketAddr) -> TcpStream ! NetError

client side

pub listen_backlog :: fn(sa: addr::SocketAddr, backlog: i32) -> TcpListener ! NetError

sets SO_REUSEADDR first so a restart survives TIME_WAIT

pub listen :: fn(sa: addr::SocketAddr) -> TcpListener ! NetError

backlog 16