package cohttp-lwt-unix

  1. Overview
  2. Docs

Module Cohttp_lwt_unix.ServerSource

The Server module implements the full UNIX HTTP server interface, including the UNIX-specific functions defined in S.

include Cohttp_lwt.S.Server with module IO = Cohttp_lwt_unix__.Io
Sourcemodule IO : sig ... end
Sourcetype response_action = [
  1. | `Expert of Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)
  2. | `Response of Cohttp.Response.t * Cohttp_lwt.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.
Sourcetype t
Sourceval make_response_action : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt.Body.t -> response_action Lwt.t) -> unit -> t
Sourceval make_expert : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt.Body.t -> (Cohttp.Response.t * (IO.ic -> IO.oc -> unit Lwt.t)) Lwt.t) -> unit -> t
Sourceval make : ?conn_closed:(conn -> unit) -> callback: (conn -> Cohttp.Request.t -> Cohttp_lwt.Body.t -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t) -> unit -> t
Sourceval resolve_local_file : docroot:string -> uri:Uri.t -> string

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

Sourceval respond : ?headers:Cohttp.Header.t -> ?flush:bool -> status:Cohttp.Code.status_code -> body:Cohttp_lwt.Body.t -> unit -> (Cohttp.Response.t * Cohttp_lwt.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.

Sourceval respond_string : ?flush:bool -> ?headers:Cohttp.Header.t -> status:Cohttp.Code.status_code -> body:string -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Sourceval respond_error : ?headers:Cohttp.Header.t -> ?status:Cohttp.Code.status_code -> body:string -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Sourceval respond_redirect : ?headers:Cohttp.Header.t -> uri:Uri.t -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Sourceval respond_need_auth : ?headers:Cohttp.Header.t -> auth:Cohttp.Auth.challenge -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Sourceval respond_not_found : ?uri:Uri.t -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Sourceval callback : t -> IO.conn -> IO.ic -> IO.oc -> unit Lwt.t
Sourceval resolve_file : docroot:string -> uri:Uri.t -> string
Sourceval respond_file : ?headers:Cohttp.Header.t -> fname:string -> unit -> (Cohttp.Response.t * Cohttp_lwt.Body.t) Lwt.t
Sourceval create : ?timeout:int -> ?backlog:int -> ?stop:unit Lwt.t -> ?on_exn:(exn -> unit) -> ?ctx:Net.ctx -> ?mode:Conduit_lwt_unix.server -> t -> unit Lwt.t

create ?timeout ?backlog ?stop ?on_exn ?ctx ?mode t is a new HTTP server.

When provided, mode selects the connection type. By default it is using a TCP socket listening on port 8080.

When provided, ctx is the network context to use. By default is Net.default_ctx.

When provided, the stop thread will terminate the server if it ever becomes determined.

When provided, backlog will limit the number of open connections.

Every connection will be served in a new lightweight thread that is invoked via the callback defined in t. If the callback raises an exception, it is passed to on_exn (by default, to !Lwt.async_exception_hook).

OCaml

Innovation. Community. Security.