package picos_io_cohttp

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Convenience functions for processing requests and constructing responses.

Please consult the CoHTTP documentation.

include Cohttp.Generic.Server.S with type 'a IO.t = 'a with type IO.conn = Picos_io.Unix.file_descr with type body = Cohttp.Body.t
module IO : Cohttp.S.IO with type 'a t = 'a with type conn = Picos_io.Unix.file_descr
type body = Cohttp.Body.t
type response_action = [
  1. | `Expert of Http.Response.t * (IO.ic -> IO.oc -> unit IO.t)
  2. | `Response of Http.Response.t * body
]

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 unitIO.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 -> (Http.Response.t * body) IO.t) -> unit -> t
val respond : ?headers:Http.Header.t -> ?flush:bool -> status:Http.Status.t -> body:body -> unit -> (Http.Response.t * body) IO.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 : ?headers:Http.Header.t -> ?flush:bool -> status:Http.Status.t -> body:string -> unit -> (Http.Response.t * body) IO.t
val callback : t -> IO.conn -> IO.ic -> IO.oc -> unit IO.t
val run : t -> IO.conn -> unit

run server socket starts running a server that accepts clients on the specified socket. This never returns normally.

OCaml

Innovation. Community. Security.