Module Cohttp_lwt.Make_server

Parameters

module IO : S.IO

Signature

module IO = IO
type conn = IO.conn * Cohttp.Connection.t
type response_action = [
  1. | `Expert of Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)
  2. | `Response of Cohttp.Response.t * Body.t
]

A request handler can respond in two ways:

  • Using `Response, with a Response.t and a Body.t.
  • 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 unitLwt.t is resolved. The connection can be closed by closing the !IO.ic.
type t
val make_response_action : ?conn_closed:(conn -> unit) -> ?sleep_fn:(unit -> unit Lwt.t) -> callback:(conn -> Cohttp.Request.t -> Body.t -> response_action Lwt.t) -> unit -> t

make_response_action creates a set of callbacks used by Cohttp Server.

  • callback is called when a new connection is accepted by the server socket.
  • conn_closed if provided, will be called when the connection is closed, e.g. when an EOF is received.
  • sleep_fn if provided, will be used for periodic checks for EOF from the client. If this callback is not provided, Cohttp will not detect and notify the client about EOF received from the peer while the client is handling the new connection. This can lead to a resource leak if the callback is designed to never resolve. If the connection is closed locally, Cohttp will stop waiting for EOF and will wait the promise to be cancelled.
val make_expert : ?conn_closed:(conn -> unit) -> ?sleep_fn:(unit -> unit Lwt.t) -> callback: (conn -> Cohttp.Request.t -> Body.t -> (Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)) Lwt.t) -> unit -> t
val make : ?conn_closed:(conn -> unit) -> ?sleep_fn:(unit -> unit Lwt.t) -> callback: (conn -> Cohttp.Request.t -> Body.t -> (Cohttp.Response.t * Body.t) Lwt.t) -> unit -> t
val resolve_local_file : docroot:string -> uri:Uri.t -> string

Resolve a URI and a docroot into a concrete local filename.

Deprecated. Please use Cohttp.Path.resolve_local_file.

val respond : ?headers:Cohttp.Header.t -> ?flush:bool -> status:Cohttp.Code.status_code -> body:Body.t -> unit -> (Cohttp.Response.t * Body.t) Lwt.t

respond ?headers ?flush ~status ~body will respond to an HTTP request with the given status code and response body. If flush is true, then every response chunk will be flushed to the network rather than being buffered. flush is true by default. The transfer encoding will be detected from the body value and set to chunked encoding if it cannot be determined immediately. You can override the encoding by supplying an appropriate Content-length or Transfer-encoding in the headers parameter.

val respond_string : ?flush:bool -> ?headers:Cohttp.Header.t -> status:Cohttp.Code.status_code -> body:string -> unit -> (Cohttp.Response.t * Body.t) Lwt.t
val respond_error : ?headers:Cohttp.Header.t -> ?status:Cohttp.Code.status_code -> body:string -> unit -> (Cohttp.Response.t * Body.t) Lwt.t
val respond_redirect : ?headers:Cohttp.Header.t -> uri:Uri.t -> unit -> (Cohttp.Response.t * Body.t) Lwt.t
val respond_need_auth : ?headers:Cohttp.Header.t -> auth:Cohttp.Auth.challenge -> unit -> (Cohttp.Response.t * Body.t) Lwt.t
val respond_not_found : ?uri:Uri.t -> unit -> (Cohttp.Response.t * Body.t) Lwt.t
val callback : t -> IO.conn -> IO.ic -> IO.oc -> unit Lwt.t