Skip to main content

Server

Struct Server 

Source
pub struct Server {}

Implementations§

Source§

impl Server

Source

pub fn process_request( stream: impl Read + Write + Unpin, peer_addr: SocketAddr, ) -> Vec<u8> ⓘ

Source

pub fn bad_request_response(message: String) -> Vec<u8> ⓘ

Source

pub fn payload_too_large_response(message: String) -> Vec<u8> ⓘ

Builds a 413 Payload Too Large raw response for a request whose declared Content-Length exceeds RWS_CONFIG_MAX_BODY_SIZE_IN_BYTES. The connection is always closed after this is sent (see Server::process) — the client’s unread body bytes are still queued on the socket, so keep-alive framing can’t be trusted.

Source

pub fn header_fields_too_large_response() -> Vec<u8> ⓘ

Builds a 431 Request Header Fields Too Large raw response for a request head longer than [framing::MAX_HEAD_SIZE]. The connection is closed after it: the rest of the oversized head is still unread.

Source

pub fn request_timeout_response() -> Vec<u8> ⓘ

Builds a 408 Request Timeout raw response for a client that started a request head but didn’t finish it within REQUEST_HEAD_TIMEOUT. The connection is closed after it.

Source

pub fn continue_response() -> Vec<u8> ⓘ

Builds the 100 Continue interim response (RFC 9110 §15.2.1) — no headers, no body, just the status line. Sent immediately after parsing a request with Expect: 100-continue, before reading its body, so the client (which is waiting for this before it uploads the body) doesn’t stall or time out. See Server::process for where this is sent from.

Source

pub fn expectation_failed_response(message: String) -> Vec<u8> ⓘ

Builds a 417 Expectation Failed raw response for an Expect header value other than 100-continue (RFC 9110 §10.1.1) — the only expectation this server understands. Sent instead of reading the request body, since the expectation can’t be met either way.

Source

pub fn process( stream: impl Read + Write + Unpin, connection: ConnectionInfo, app: impl Application, ) -> Result<(), String>

Source

pub fn setup() -> Result<(TcpListener, ThreadPool), String>

Reads configuration (IP, port, thread count, TLS paths) from the layered config system and returns a bound TcpListener and a sized ThreadPool. Call once at startup.

Source

pub fn run( listener: TcpListener, pool: ThreadPool, app: impl Application + Send + 'static + Clone, )

Accepts TCP connections in a loop and dispatches each to the thread pool.

When built with the http1 feature, Ctrl+C and SIGTERM stop the accept loop gracefully: SERVER_READY is cleared and the pool drains all in-flight connections before returning.

For TLS/HTTP2/HTTP3 use [Server::run_tls].

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.