Module Http_async.Server

type error_handler = ?exn:Core.Exn.t -> ?request:Request.t -> Status.t -> (Response.t * Body.Writer.t) Async.Deferred.t
val run_server_loop : ?error_handler:error_handler -> ( (Request.t * Body.Reader.t) -> (Response.t * Body.Writer.t) Async.Deferred.t ) -> Shuttle.Input_channel.t -> Shuttle.Output_channel.t -> unit Async.Deferred.t

run_server_loop accepts a HTTP service, and returns a callback that can be used to drive the server loop created via Shuttle.Connection.listen. This allows the user to customize the Input_channel and Output_channel and have control over the various Server configuration options like accept_n, backlog and more.

val run : ?max_connections:int -> ?max_accepts_per_batch:int -> ?backlog:int -> ?socket: ( [ `Unconnected ], [< Async.Socket.Address.t ] as 'a ) Async.Socket.t -> ?buffer_config:Buffer_config.t -> ?error_handler:( 'a -> error_handler ) -> where_to_listen:( 'a, 'b ) Async.Tcp.Where_to_listen.t -> ( 'a -> (Request.t * Body.Reader.t) -> (Response.t * Body.Writer.t) Async.Deferred.t ) -> ( 'a, 'b ) Async.Tcp.Server.t Async.Deferred.t

run sets up a Tcp.Server.t and drives the HTTP server loop with the user provided request-handler.

val run_command : ?interrupt:unit Async.Deferred.t -> ?readme:( unit -> string ) -> ?error_handler:( Async.Socket.Address.Inet.t -> error_handler ) -> summary:string -> ( Async.Socket.Address.Inet.t -> (Request.t * Body.Reader.t) -> (Response.t * Body.Writer.t) Async.Deferred.t ) -> Async.Command.t

run_command is similar to run but instead returns an Async.Command.t that can be used to start the async event loop from a program's entrypoint. If interrupt is provided, the server will be stopped when interrupt is fulfilled.