Module Cohttp_eio.Server

type writer
include Cohttp.Generic.Server.S with module IO = Cohttp_eio__.Io.IO and type body = Body.t and type response = writer -> unit
module IO : sig ... end
type body = Body.t
type response = writer -> unit
type response_action = [
  1. | `Expert of Http.Response.t * (IO.ic -> IO.oc -> unit IO.t)
  2. | `Response of response
]

A request handler can respond in two ways:

  • Using `Response, with a Response.t and a body.
  • Using `Expert, with a Response.t and an IO function that is expected to write the response body. The IO function has access to the underlying IO.ic and IO.oc, which allows writing a response body more efficiently, stream a response or to switch protocols entirely (e.g. websockets). Processing of pipelined requests continue after the unit IO.t is resolved. The connection can be closed by closing the IO.ic.
type t
val make_response_action : ?conn_closed:(conn -> unit) -> callback:(conn -> Http.Request.t -> body -> response_action IO.t) -> unit -> t
val make_expert : ?conn_closed:(conn -> unit) -> callback: (conn -> Http.Request.t -> body -> (Http.Response.t * (IO.ic -> IO.oc -> unit IO.t)) IO.t) -> unit -> t
val make : ?conn_closed:(conn -> unit) -> callback:(conn -> Http.Request.t -> body -> response IO.t) -> unit -> t
val respond_string : ?headers:Http.Header.t -> status:Http.Status.t -> body:string -> unit -> response IO.t
val callback : t -> IO.conn -> IO.ic -> IO.oc -> unit IO.t
val respond : ?headers:Http.Header.t -> status:Http.Status.t -> body:_ Eio.Flow.source -> unit -> response IO.t
val run : ?max_connections:int -> ?additional_domains:(_ Eio__Domain_manager.t * int) -> ?stop:'a Eio.Promise.t -> on_error:(exn -> unit) -> _ Eio.Net.listening_socket -> t -> 'a