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

ServerBuilder

cajeta.io.net.ServerBuilder — the model-selection builder for a Server, opened with Server.builder(). It is the single fluent surface for picking which accept stack a server uses — Model A (fiber-per-connection, the default) or Model B (event-driven shared-pool, via ServerModel.sharedPool(n)) — without naming the concrete server class. bind (or bindAddress) and handler are required; backlog defaults to the platform listen backlog (UNSET_BACKLOG). The builder is a pure value until build() is called — no I/O happens while recording choices.

ServerBuilder b #= Server.builder();
b.bind("127.0.0.1:0");
b.model(ServerModel.fiberPerConnection());
b.handler((TcpStream conn) -> { conn.close(); });
Server s #= b.build();

Each setter returns the builder as a plain borrow. The builder that Server.builder() returns is an owned temporary when nothing names it, and it is freed at the end of its statement. So bind the builder to a local first, as above, or end a single chain with build(), which returns an owned #Server:

Server s #= Server.builder()
    .bind("127.0.0.1:0")
    .model(ServerModel.fiberPerConnection())
    .handler((TcpStream conn) -> { conn.close(); })
    .build();

Keeping a setter’s result is rejected:

ServerBuilder b #= Server.builder().bind("127.0.0.1:0").handler(h);   // CAJETA_ERROR_BORROW_OF_TEMPORARY

Methods

Signature
ServerBuilder bind(String addr)Bind to a host:port (or [v6]:port) string, parsed via SocketAddress.parse
ServerBuilder bindAddress(SocketAddress addr)Bind to an already-parsed SocketAddress
ServerBuilder model(ServerModel m)Select the accept model — ServerModel.fiberPerConnection() (Model A) or ServerModel.sharedPool(n) (Model B)
ServerBuilder handler((TcpStream) -> void h)Set the per-connection handler, invoked once per accepted connection with the owned TcpStream
ServerBuilder backlog(int32 backlog)Set an explicit listen(2) backlog (the accept-queue depth)
#Server build() ⚑Build the configured Server; either model returns a Server, so the caller drives the same serve() / shutdown() surface
void serve()Terminal convenience: build the selected server, then run its accept loop synchronously

⚑ = @EntryPoint

See also

Source: docs/stdlib/io/net/ServerBuilder.md · 1 min read · 288 words