silk/http_server
Profiles: aarch64-apple-darwin, aarch64-unknown-linux-gnu, aarch64-unknown-linux-gnu-no-libc, wasm32-unknown-unknown, x86_64-unknown-linux-gnu, x86_64-unknown-linux-gnu-no-libc.
Scoped bounded streaming HTTP/1.0 and HTTP/1.1 server connections.
Details
withConnection binds one concrete byte provider and one buffered session for a serial
connection lifetime. withRequest lends one request at a time; its parsed head, body decoder,
response writer, and upgraded channel cannot escape their nested callbacks. Scope release closes
abortively and never hides a protected exit behind flush or drain work.
Import as Connection with import silk.http_server { Connection }.
Public declarations: 22.
ConnectionPhase
pub enum ConnectionPhaseThe externally visible connection lifecycle.
Ready
Ready = 0Permits admission of the next request within the request budget.
RequestActive
RequestActive = 1Permits request inspection, body reads, and response selection.
Responding
Responding = 2Permits writes through the active response writer.
Closing
Closing = 3Requires closure and forbids another request.
Upgraded
Upgraded = 4Lends the channel to another protocol and forbids HTTP operations.
Closed
Closed = 5Marks a completed connection with no further I/O permitted.
Failed
Failed = 6Marks a terminal protocol or transport failure.
BodyMode
pub union BodyModeThe caller-selected response body delimiter.
NoBody
BodyMode.NoBody: BodyModeSends no response payload, including special responses such as HEAD and 204.
ContentLength
BodyMode.ContentLength { length: u64 }: BodyModeSends exactly the declared number of payload bytes.
Field length
pub length: u64The exact payload length required before finish.
Chunked
BodyMode.Chunked: BodyModeUses HTTP/1.1 chunk framing and permits bounded trailers.
CloseDelimited
BodyMode.CloseDelimited: BodyModeUses connection closure as the payload delimiter and forbids reuse.
Implementation Copy for BodyMode
impl Copy for BodyModeReusePolicy
pub enum ReusePolicyPersistence policy. A policy never overrides missing completion evidence.
Automatic
Automatic = 0Uses HTTP/1.1 persistence when both message boundaries and peer policy permit it.
CloseAfterResponse
CloseAfterResponse = 1Closes after this response regardless of peer persistence policy.
Http10KeepAlive
Http10KeepAlive = 2Also permits HTTP/1.0 reuse when the peer explicitly requests keep-alive.
Limits
pub struct LimitsFinite server budgets and the exact lower-level limits they compose.
Field head
pub head: HeadLimitsThe finite limits for request and response head parsing.
Field body
pub body: BodyLimitsThe finite limits for body framing, payload, trailers, and owned decoder storage.
Field values
pub values: HeaderLimitsThe limits for response values, including generated Connection fields.
Field readCapacity
pub readCapacity: usizeThe positive fixed capacity of the input buffer.
Field writeCapacity
pub writeCapacity: usizeThe positive fixed capacity of the output buffer.
Field maxRequestsPerConnection
pub maxRequestsPerConnection: usizeThe maximum admitted requests; zero prevents any request-head read.
Field maxInformationalResponses
pub maxInformationalResponses: usizeThe maximum explicit and automatic informational responses per request.
Field maxDiscardWireBytes
pub maxDiscardWireBytes: u64The maximum wire bytes discarded by one request-body discard call.
Field shutdownDrainBytes
pub shutdownDrainBytes: usizeThe maximum input bytes discarded by explicit connection finish.
Implementation Copy for Limits
impl Copy for LimitsServerLimitKind
pub enum ServerLimitKindServer-owned limits distinct from lower-level parser, value, and framing limits.
InformationalResponses
InformationalResponses = 0The combined count of explicit and automatic informational responses.
ServerError
pub union ServerErrorA precise server lifecycle failure preserving its lower-level cause.
Head
ServerError.Head { error: ParseError }: ServerErrorA request or response head failed validation.
Field error
pub error: ParseErrorThe exact head parser failure.
Body
ServerError.Body { error: BodyError }: ServerErrorA request or response body violated its framing contract.
Field error
pub error: BodyErrorThe framing failure and its committed progress.
Buffer
ServerError.Buffer { error: BufferError }: ServerErrorA buffered transport operation failed.
Field error
pub error: BufferErrorThe buffer failure and any recorded transport progress.
Output
ServerError.Output { error: BufferError, progress: WriteProgress }: ServerErrorResponse framing advanced before buffered output failed.
Field error
pub error: BufferErrorThe failure from the buffered transport.
Field progress
pub progress: WriteProgressThe accepted payload, buffered prefix, and cumulative framing coordinates.
Value
ServerError.Value { error: ValueError }: ServerErrorA response value or normalized header failed validation.
Field error
pub error: ValueErrorThe exact shared HTTP value failure.
LimitExceeded
ServerError.LimitExceeded { limit: ServerLimitKind, allowed: u64, attempted: u64 }: ServerErrorAn operation would exceed a finite server limit.
Field limit
pub limit: ServerLimitKindThe exhausted resource.
Field allowed
pub allowed: u64The configured maximum for this resource.
Field attempted
pub attempted: u64The count that the operation attempted to reach.
SizeOverflow
ServerError.SizeOverflow: ServerErrorChecked count or byte arithmetic cannot represent the requested result.
UnsupportedExpectation
ServerError.UnsupportedExpectation: ServerErrorA body operation encountered an unsupported request expectation.
InvalidBodyMode
ServerError.InvalidBodyMode: ServerErrorThe chosen body mode conflicts with the response framing or status.
InvalidState
ServerError.InvalidState { phase: ConnectionPhase }: ServerErrorThe requested operation is unavailable in the current phase.
Field phase
pub phase: ConnectionPhaseThe phase that rejected the operation.
UpgradeRejected
ServerError.UpgradeRejected: ServerErrorThe request, selected protocol, or response cannot perform a generic Upgrade.
TunnelRejected
ServerError.TunnelRejected: ServerErrorThe request or response cannot perform a CONNECT tunnel handoff.
TruncatedHead
ServerError.TruncatedHead: ServerErrorInput ended before a complete HTTP head became available.
WriteProgress
pub struct WriteProgressExact payload accepted by one response-writer call and framed bytes accepted by buffering.
Field consumed
pub consumed: usizeThe caller payload prefix accepted during this writer call.
Field buffered
pub buffered: usizeThe framed prefix accepted by the output buffer during this writer call.
Field totalPayload
pub totalPayload: u64The cumulative payload bytes accepted by the response encoder.
Field totalWire
pub totalWire: u64The cumulative framed bytes produced by the response encoder.
Implementation Copy for WriteProgress
impl Copy for WriteProgressConnection
pub struct Connection<'connection, 'transport, P>One affine serial server connection borrowing its concrete buffered channel.
Method Connection.phase
pub fn phase<'connection, 'transport, P, 'life3>(self: &'life3 Connection<'connection, 'transport, P>) -> ConnectionPhaseReturns the current connection phase.
Method Connection.requests
pub fn requests<'connection, 'transport, P, 'life3>(self: &'life3 Connection<'connection, 'transport, P>) -> usizeReturns the number of request heads admitted by this connection.
Method Connection.unread
pub fn unread<'connection, 'transport, P, 'life3>(self: &'life3 Connection<'connection, 'transport, P>) -> usizeReturns the exact byte count retained in the input buffer.
Request
pub struct Request<'request, 'connection, 'transport, P>One callback-scoped active request and its single-message framing decoder.
Method Request.head
pub effect<'env> fn head<'request: 'env, 'connection: 'env, 'transport: 'env, P: 'env, 'head: 'env, 'env>(self: &'head Request<'request, 'connection, 'transport, P>) -> silk/http_head.RequestHead<'head> ! ServerErrorBorrows the completed parsed head from active request storage.
Method Request.bodyComplete
pub effect<'env> fn bodyComplete<'request: 'env, 'connection: 'env, 'transport: 'env, P: 'env, 'life4: 'env, 'env>(self: &'life4 Request<'request, 'connection, 'transport, P>) -> bool ! ServerErrorReturns whether request framing completed; fails unless the request remains active.
Method Request.expectationRejected
pub effect<'env> fn expectationRejected<'request: 'env, 'connection: 'env, 'transport: 'env, P: 'env, 'life4: 'env, 'env>(self: &'life4 Request<'request, 'connection, 'transport, P>) -> bool ! ServerErrorReturns whether Expect requires rejection; fails unless the request remains active.
ResponseWriter
pub struct ResponseWriter<'writer, 'request, 'connection, 'transport, P>One nested final-response writer. Its fields are private so completion cannot be forged.
Method ResponseWriter.writeSome
pub effect<'env> fn writeSome<'writer: 'env, 'request: 'env, 'connection: 'env, 'transport: 'env, P: 'env, 'life5: 'env, 'life6: 'env, 'env>(self: &'life5 mut ResponseWriter<'writer, 'request, 'connection, 'transport, P>, input: &'life6 [u8], deadline: silk/option.Option<silk/system_clock.Instant>) -> WriteProgress ! ServerError ? &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockAccepts one payload prefix into the shared framing and bounded output owners.
Method ResponseWriter.writeAll
pub effect<'env> fn writeAll<'writer: 'env, 'request: 'env, 'connection: 'env, 'transport: 'env, P: 'env, 'life5: 'env, 'life6: 'env, 'env>(self: &'life5 mut ResponseWriter<'writer, 'request, 'connection, 'transport, P>, input: &'life6 [u8], deadline: silk/option.Option<silk/system_clock.Instant>) -> WriteProgress ! ServerError ? &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockAccepts the complete caller payload in order.
Method ResponseWriter.finish
pub effect<'env> fn finish<'writer: 'env, 'request: 'env, 'connection: 'env, 'transport: 'env, P: 'env, 'value: 'env, 'life6: 'env, 'life7: 'env, 'env>(self: &'life6 mut ResponseWriter<'writer, 'request, 'connection, 'transport, P>, trailers: &'life7 silk/http_headers.Headers<'value>, deadline: silk/option.Option<silk/system_clock.Instant>) -> () ! ServerError ? &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockSnapshots trailers, completes response framing, and flushes the response exactly once.
ConnectionHandler
pub interface ConnectionHandler<P, A, E, ?R>Compile-time handler selected for one scoped server connection.
Operation handle
effect<'call> fn handle<'call: 'call, 'connection: 'call, 'transport: 'connection + 'call>(handler: Self, connection: &'call mut silk/http_server.Connection<'connection, 'transport, P>) -> A ! E ? R where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockRuns within the connection loan and preserves the handler failure and requirement channels.
validateLimits
pub fn validateLimits<'life0>(limits: &'life0 silk/http_server.Limits) -> silk/result.Result<(), silk/http_server.ServerError>Validates server-only construction invariants without allocation or I/O.
withConnection
pub effect<'env1> fn withConnection<'env: 'env1, A, E, ?CallbackRequirements, P: 'env1, H: 'env1, 'env1>(transport: &'env mut P, limits: Limits, handler: H) -> A ! E | ServerError | BufferError | OutOfMemoryError ? CallbackRequirements | &mut Allocator where &mut P provides &ByteDuplex from &mut ByteDuplex, &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClock, CallbackRequirements in Without<CallbackRequirements, &ByteDuplex>Runs one higher-ranked server callback over a single bound concrete provider.
withRequest
pub effect<'env> fn withRequest<'request: 'env, 'connection: 'request + 'env, 'transport: 'connection + 'env, 'callback: 'env, A, E, ?CallbackRequirements, P: 'env, 'env>(connection: &'request mut silk/http_server.Connection<'connection, 'transport, P>, deadline: silk/option.Option<silk/system_clock.Instant>, callback: for<'call, 'requestView: 'call, 'connectionView: 'requestView, 'transportView: 'connectionView> once fn<'callback>(&'call mut silk/http_server.Request<'requestView, 'connectionView, 'transportView, P>) -> once Effect<'call; A ! E ? CallbackRequirements>) -> silk/option.Option<A> ! E | ServerError | OutOfMemoryError ? CallbackRequirements | &mut Allocator | &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockAdmits at most one request and lends it exclusively. None is clean end between requests.
readSome
pub effect<'env> fn readSome<'request: 'env, 'connection: 'env, 'transport: 'env, P: 'env, 'life4: 'env, 'life5: 'env, 'env>(request: &'life4 mut silk/http_server.Request<'request, 'connection, 'transport, P>, output: &'life5 mut [u8], deadline: silk/option.Option<silk/system_clock.Instant>) -> usize ! ServerError ? &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockReads one provisional decoded payload prefix.
discardRemaining
pub effect<'env> fn discardRemaining<'request: 'env, 'connection: 'env, 'transport: 'env, P: 'env, 'life4: 'env, 'env>(request: &'life4 mut silk/http_server.Request<'request, 'connection, 'transport, P>, maxWireBytes: u64, deadline: silk/option.Option<silk/system_clock.Instant>) -> () ! ServerError ? &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockExplicitly discards the remaining framed request under the smaller configured/caller wire bound.
finishConnection
pub effect<'env> fn finishConnection<'connection: 'env, 'transport: 'env, P: 'env, 'life3: 'env, 'env>(connection: &'life3 mut silk/http_server.Connection<'connection, 'transport, P>, maxDrainBytes: usize, deadline: Instant) -> () ! ServerError ? &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockGracefully flushes, shuts down writes, and performs one finite best-effort input drain.
sendInformational
pub effect<'env> fn sendInformational<'request: 'env, 'connection: 'env, 'transport: 'env, 'value: 'env, P: 'env, 'life5: 'env, 'life6: 'env, 'env>(request: &'life5 mut silk/http_server.Request<'request, 'connection, 'transport, P>, head: &'life6 silk/http.ResponseHead<'value>, deadline: silk/option.Option<silk/system_clock.Instant>) -> () ! ServerError ? &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockSends one bounded informational response and flushes it before returning.
respond
pub effect<'env> fn respond<'writer: 'env, 'request: 'writer + 'env, 'connection: 'request + 'env, 'transport: 'connection + 'env, 'value: 'writer + 'env, 'names: 'request + 'env, 'callback: 'env, A, E, ?CallbackRequirements, P: 'env, 'life11: 'env, 'env>(request: &'writer mut silk/http_server.Request<'request, 'connection, 'transport, P>, head: &'life11 silk/http.ResponseHead<'value>, mode: BodyMode, reuse: ReusePolicy, trailerPolicy: silk/http_body.TrailerPolicy<'names>, deadline: silk/option.Option<silk/system_clock.Instant>, callback: for<'call, 'writerView: 'call, 'requestView: 'writerView, 'connectionView: 'requestView, 'transportView: 'connectionView> once fn<'callback>(&'call mut silk/http_server.ResponseWriter<'writerView, 'requestView, 'connectionView, 'transportView, P>) -> once Effect<'call; A ! E ? CallbackRequirements>) -> A ! E | ServerError | OutOfMemoryError ? CallbackRequirements | &mut Allocator | &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockBegins exactly one final response and lends its streaming writer.
reject
pub effect<'env> fn reject<'loan: 'env, 'request: 'loan + 'env, 'connection: 'request + 'env, 'transport: 'connection + 'env, 'value: 'env, P: 'env, 'life6: 'env, 'env>(request: &'loan mut silk/http_server.Request<'request, 'connection, 'transport, P>, head: &'life6 silk/http.ResponseHead<'value>, deadline: silk/option.Option<silk/system_clock.Instant>) -> () ! ServerError | OutOfMemoryError ? &mut Allocator | &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockSends a final body-free response without waiting for unread request content.
withUpgrade
pub effect<'env> fn withUpgrade<'loan: 'env, 'request: 'loan + 'env, 'connection: 'request + 'env, 'transport: 'connection + 'env, 'value: 'loan + 'env, 'callback: 'env, A, E, ?CallbackRequirements, P: 'env, 'life10: 'env, 'life11: 'env, 'env>(request: &'loan mut silk/http_server.Request<'request, 'connection, 'transport, P>, selectedProtocol: string<'life10>, response: &'life11 silk/http.ResponseHead<'value>, deadline: silk/option.Option<silk/system_clock.Instant>, callback: for<'call, 'transportView: 'call> once fn<'callback>(&'call mut silk/buffered_duplex.BufferedDuplex<'transportView, P>) -> once Effect<'call; A ! E ? CallbackRequirements>) -> A ! E | ServerError | OutOfMemoryError ? CallbackRequirements | &mut Allocator | &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockCompletes a validated HTTP Upgrade response and lends the exact buffered suffix.
withTunnel
pub effect<'env> fn withTunnel<'loan: 'env, 'request: 'loan + 'env, 'connection: 'request + 'env, 'transport: 'connection + 'env, 'value: 'loan + 'env, 'callback: 'env, A, E, ?CallbackRequirements, P: 'env, 'life10: 'env, 'env>(request: &'loan mut silk/http_server.Request<'request, 'connection, 'transport, P>, response: &'life10 silk/http.ResponseHead<'value>, deadline: silk/option.Option<silk/system_clock.Instant>, callback: for<'call, 'transportView: 'call> once fn<'callback>(&'call mut silk/buffered_duplex.BufferedDuplex<'transportView, P>) -> once Effect<'call; A ! E ? CallbackRequirements>) -> A ! E | ServerError | OutOfMemoryError ? CallbackRequirements | &mut Allocator | &mut MonotonicClock where &mut P provides &ByteDuplex from &mut ByteDuplex | &mut MonotonicClockCompletes a successful CONNECT response and lends the exact buffered tunnel suffix.