Lyric v4.5.0

std.io.net

TCP for tasks: listen/accept on the server side, connect on the client's, readSome/write on both, every waiting form yielding to the scheduler instead of blocking the thread.

The silent forms answer whether (null/false); the OrThrow twins say why with an IoError, from the same implementation. readSome folds three truths into one answer: bytes are bytes, an EMPTY array is the peer being done (EOF), and null is a failure.

Listener alias

pub type Listener = int

A listening endpoint. Opaque: it is issued here, never assembled.

stdlib/std/io/net.lyr:27

Socket alias

pub type Socket = int

A connected stream. Opaque, like the listener.

stdlib/std/io/net.lyr:30

UdpSocket alias

pub type UdpSocket = int

A UDP endpoint. Opaque, like the others; one handle both sends and receives.

stdlib/std/io/net.lyr:33

Packet struct

pub struct Packet

One received datagram: its payload, and who sent it — the address sendTo answers to.

UDP has no EOF, so an EMPTY payload here is a real (empty) packet, not an end — the one place this module's bytes mean something different than readSome's.

bytes: uint8[]

The payload, complete: a datagram arrives whole or not at all.

host: string

The sender's address, as the receiving socket saw it.

port: int

The sender's port.

stdlib/std/io/net.lyr:39

listen function

pub fn listen(host: string, port: int): ?Listener

Listens on host:port. Port 0 asks the OS for a free one — localPort says which. null when the address cannot be taken; listenOrThrow says why.

stdlib/std/io/net.lyr:89

listenOrThrow function

pub fn listenOrThrow(host: string, port: int): Listener throws IoError

listen, with the reason when it cannot.

stdlib/std/io/net.lyr:98

localPort function

pub fn localPort(listener: Listener): int

The port a listener actually holds — the answer to listen(host, 0).

stdlib/std/io/net.lyr:107

accept function

pub fn accept(listener: Listener): ?Socket

Waits for the next connection. null when the listener broke; acceptOrThrow says why.

stdlib/std/io/net.lyr:112

acceptOrThrow function

pub fn acceptOrThrow(listener: Listener): Socket throws IoError

accept, with the reason when the listener broke.

stdlib/std/io/net.lyr:126

connect function

pub fn connect(host: string, port: int): ?Socket

Waits until a connection to host:port stands or is refused. null on refusal or any other failure; connectOrThrow names the kind — ConnectionRefused when nothing listens.

stdlib/std/io/net.lyr:136

connectOrThrow function

pub fn connectOrThrow(host: string, port: int): Socket throws IoError

connect, with the reason when it cannot.

stdlib/std/io/net.lyr:155

readSome function

pub fn readSome(socket: Socket, max: int): ?uint8[]

Waits for bytes and reads up to max of them. Three truths in one answer: bytes are bytes, an EMPTY array is the peer being done (EOF), and null is a failure — readSomeOrThrow says which failure.

A max of zero or less PANICS: an empty answer already means EOF, so there is no honest value to hand back for it.

stdlib/std/io/net.lyr:169

readSomeOrThrow function

pub fn readSomeOrThrow(socket: Socket, max: int): uint8[] throws IoError

readSome, with the reason when the stream broke. EOF stays the empty array — the peer being done is an ordinary state, not a failure.

stdlib/std/io/net.lyr:187

write function

pub fn write(socket: Socket, bytes: uint8[]): bool

Writes ALL of bytes, waiting whenever the stream is full. false when the stream broke midway; writeOrThrow says why.

stdlib/std/io/net.lyr:197

writeOrThrow function

pub fn writeOrThrow(socket: Socket, bytes: uint8[]): void throws IoError

write, with the reason when the stream broke.

stdlib/std/io/net.lyr:214

close function

pub fn close(socket: Socket): void

Closes a socket. Closing twice closes once.

stdlib/std/io/net.lyr:221

closeListener function

pub fn closeListener(listener: Listener): void

Closes a listener.

stdlib/std/io/net.lyr:226

bind function

pub fn bind(host: string, port: int): ?UdpSocket

Binds a UDP endpoint on host:port. Port 0 asks the OS for a free one — localPort says which. null when the address cannot be taken; bindOrThrow says why, AddressInUse being the usual answer.

stdlib/std/io/net.lyr:235

bindOrThrow function

pub fn bindOrThrow(host: string, port: int): UdpSocket throws IoError

bind, with the reason when it cannot.

stdlib/std/io/net.lyr:244

localPort function

pub fn localPort(socket: UdpSocket): int

The port a UDP endpoint actually holds — the answer to bind(host, 0).

stdlib/std/io/net.lyr:253

sendTo function

pub fn sendTo(socket: UdpSocket, host: string, port: int, bytes: uint8[]): bool

Sends one datagram to host:port, waiting out a full send buffer. The datagram goes whole or not at all; false when it cannot go — sendToOrThrow says why. There is no delivery promise: that is UDP, not this module.

stdlib/std/io/net.lyr:260

sendToOrThrow function

pub fn sendToOrThrow(socket: UdpSocket, host: string, port: int, bytes: uint8[]): void throws IoError

sendTo, with the reason when the datagram cannot go.

stdlib/std/io/net.lyr:274

receiveFrom function

pub fn receiveFrom(socket: UdpSocket, max: int): ?Packet

Waits for one datagram and answers it whole, with its sender. A payload longer than max is CUT to it — datagrams do not queue their remainder. null is a failure; receiveFromOrThrow says which. An empty payload is a real packet: UDP has no EOF.

A max of zero or less PANICS. It would otherwise cut the datagram to one byte and throw the rest away, which is the cutting rule above turned into silent data loss.

stdlib/std/io/net.lyr:291

receiveFromOrThrow function

pub fn receiveFromOrThrow(socket: UdpSocket, max: int): Packet throws IoError

receiveFrom, with the reason when the socket broke.

stdlib/std/io/net.lyr:308

close function

pub fn close(socket: UdpSocket): void

Closes a UDP endpoint. Closing twice closes once.

stdlib/std/io/net.lyr:317