docs / stdlib / io / net

Stdlib index
  1. Overview
  1. Captured-borrow migration worklist (3.3.3)
  2. Owned-bind migration worklist (8.2.7)
  3. Return-side title audit — the ride-through enumeration
  4. stdlib ownership audit
  5. stdlib ownership dispositions (plan 1.3.1 / 4.3.1)

aot

  1. Components
  2. Scope
  3. Scoped

codec

  1. Base32
  2. Base64

codec / csv

  1. Csv

codec / json

  1. Json

collection

  1. ArrayList
  2. BPlusTree
  3. Cache
  4. Collectors
  5. HashMap
  6. HashSet
  7. Heap
  8. ImmutableList
  9. ImmutableMap
  10. ImmutableSet
  11. LinkedList
  12. RedBlackTree
  13. Sort

collection / ltm

  1. LtmBPlusTree

concurrent

  1. AtomicInt32
  2. AtomicInt64
  3. Channel
  4. Fiber
  5. FiberLocal
  6. Lock
  7. Mutex
  8. RwLock
  9. Semaphore
  10. Tasks

error

  1. Exception
  2. NoOptionalValueException
  3. NotProvidedException
  4. RecoverableException
  5. ScopedBuildFailedException
  6. ScopeNotActiveException
  7. Throwable
  8. UnrecoverableException

gfx

  1. Sampler
  2. Texture2D

hash

  1. DefaultHasher
  2. Hash
  3. SipHash
  4. XXHash3

ifx

  1. BackendRegistry
  2. Window

io

  1. Buffer

io / file

  1. File
  2. FileInfo
  3. FileReader
  4. FileWriter
  5. Path
  6. Watcher

io / net

  1. BufferPool
  2. ByteBuffer
  3. IpAddress
  4. Server
  5. ServerBuilder
  6. SocketAddress
  7. TcpListener
  8. TcpStream
  9. UdpSocket

io / net / dns

  1. Dns

io / net / uri

  1. Uri
  2. UriBuilder

lang

  1. Guid
  2. Math
  3. Optional
  4. Pair
  5. Slice
  6. String
  7. StringBuilder

lang / stream

  1. ArrayStream
  2. Stream

math

  1. Camera
  2. Color
  3. DType
  4. Ray
  5. Rotation
  6. Tensor
  7. Transform

math / fft

  1. Fft

math / linalg

  1. LinAlg

math / npio

  1. Npy

math / poly

  1. Poly

math / random

  1. Generator

math / stats

  1. Stats

nucleo

  1. Columns — the Arrow-laid-out substrate
  2. Fused tensor expressions — Fuse
  3. Table — the lazy, typed dataframe
  4. Tape — define-by-run autograd
  5. Transform intrinsics — Grad, Vmap, Jit

process

  1. Command
  2. Process

reflect

  1. Class

search / distance

  1. Distance

search / fuzzy

  1. Matcher

search / ngram

  1. Index

session

  1. PackageInstallException
  2. Packages

time

  1. Clock
  2. DateTimeFormatter
  3. Duration
  4. Instant
  5. LocalDate
  6. LocalDateTime
  7. LocalTime
  8. Period
  9. ZonedDateTime
  10. ZoneId
  11. ZoneOffset

wire

  1. Compressor
  2. CompressStream
  3. DecompressionLimitException
  4. Decompressor
  5. Encoder
  6. Schema
  7. SchemaEncoder

xpu

  1. Device
  2. KernelBuffer
  3. KernelStream
  4. KernelTimer

xpu / mesh

  1. MeshSimplifier

Server

cajeta.io.net.Server — the TCP server core: bind + listen over TcpListener, an accept loop over acceptAsync, a connection handler contract, and graceful shutdown (stop accepting, drain in-flight connections with a deadline). The handler is (TcpStream) -> void: it owns the accepted connection and closes it when done; a handler that throws does not tear down the server. A single atomic state runs the lifecycle machine (NEW → RUNNING → DRAINING → STOPPED), and an atomic in-flight count is what shutdown drains to zero. This core is the scaffolding both accept models build on — Model A (fiber-per-connection, the default) ships here; Model B (shared-pool) re-homes dispatch and is selected via ServerBuilder.

SocketAddress addr #= SocketAddress.parse("127.0.0.1:0");
Server s #= Server.bind(addr, (TcpStream conn) -> { conn.close(); });
s.serve();                                   // accept loop, until shutdown
boolean drained = s.shutdown(Duration.ofSeconds(30L));

Methods

Signature
static #ServerBuilder builder() ⚑Open a ServerBuilder — the fluent model-selection surface
static #Server bind(SocketAddress addr, (TcpStream) -> void handler) ⚑Bind with the default listen backlog; the result is NEW — call serve (or spawn runAsync) to start
static #Server bindWithBacklog(SocketAddress addr, int32 backlog, (TcpStream) -> void handler) ⚑Bind with an explicit listen(2) backlog
void serve()Run the accept loop synchronously on the calling fiber until shutdown latches the state out of RUNNING
async int32 runAsync()The async sibling of serve — spawn it so the accept loop runs on its own fiber
#TcpStream acceptNext()Accept the next connection, or null once the listener has been closed by shutdown
void dispatch(#TcpStream conn)Dispatch one accepted connection to the handler (bumps the in-flight count; drops it in a finally)
static async int32 serveConnection((TcpStream) -> void handler, AtomicInt32 inflight, #TcpStream conn)Run the handler for one connection, then drop the in-flight count — even if the handler throws
boolean shutdown(Duration deadline)Graceful shutdown: stop accepting, close the listener, drain in-flight with deadline; idempotent
boolean drainInflight(Duration deadline)Park the fiber until the in-flight count reaches zero or deadline elapses
#SocketAddress localAddress()The bound local address (carries the kernel-assigned port for a :0 bind)
int32 currentState()The lifecycle state ordinal (NEW / RUNNING / DRAINING / STOPPED)
boolean isRunning()true while the accept loop is live
int32 inflightCount()Connection handlers dispatched but not yet returned

⚑ = @EntryPoint

See also

Source: docs/stdlib/io/net/Server.md · 2 min read · 422 words