package cohttp-lwt-unix
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=90ecec8bd580411b4272c031b2f6b9c0a50485d20683c6a9c615242f3724b017
sha512=83ef539469d982862174a929e9baeb5b2a34e9323ee577d8be7148ebed9e785d835d59cc22982bc083bb872e4544616e2bf531ed7edf96bc397151c28bf618d6
doc/cohttp-lwt-unix/Cohttp_lwt_unix/Server/index.html
Module Cohttp_lwt_unix.ServerSource
The Server module implements the full UNIX HTTP server interface, including the UNIX-specific functions defined in S.
The Logs source name for this module logger is "cohttp.lwt.server". Refer to the Debug module for further details.
include Cohttp_lwt.S.Server with module IO = Cohttp_lwt_unix__.Io
include Cohttp.Generic.Server.S
with type body = Cohttp_lwt.Body.t
and module IO := IO
type response_action = [ | `Expert of Http.Response.t * (IO.ic -> IO.oc -> unit IO.t)| `Response of Http.Response.t * body
]A request handler can respond in two ways:
- Using
`Response, with aResponse.tand abody. - Using
`Expert, with aResponse.tand an IO function that is expected to write the response body. The IO function has access to the underlyingIO.icandIO.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 theunitIO.tis resolved. The connection can be closed by closing theIO.ic.
val make_response_action :
?conn_closed:(conn -> unit) ->
callback:(conn -> Http.Request.t -> body -> response_action IO.t) ->
unit ->
tval make :
?conn_closed:(conn -> unit) ->
callback:(conn -> Http.Request.t -> body -> (Http.Response.t * body) IO.t) ->
unit ->
tval respond :
?headers:Http.Header.t ->
?flush:bool ->
status:Http.Status.t ->
body:body ->
unit ->
(Http.Response.t * body) IO.trespond ?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.tResolve a URI and a docroot into a concrete local filename.
val respond_error :
?headers:Http.Header.t ->
?status:Http.Status.t ->
body:string ->
unit ->
(Http.Response.t * body) IO.tval respond_redirect :
?headers:Http.Header.t ->
uri:Uri.t ->
unit ->
(Http.Response.t * body) IO.tval respond_need_auth :
?headers:Http.Header.t ->
auth:Cohttp.Auth.challenge ->
unit ->
(Http.Response.t * body) IO.tval respond_file :
?headers:Http.Header.t ->
fname:string ->
unit ->
(Http.Response.t * Cohttp_lwt.Body.t) Lwt.tval create :
?timeout:int ->
?backlog:int ->
?stop:unit Lwt.t ->
?on_exn:(exn -> unit) ->
?ctx:Net.ctx ->
?mode:Conduit_lwt_unix.server ->
t ->
unit Lwt.tcreate ?timeout ?backlog ?stop ?on_exn ?mode t is a new HTTP server.
The user can decide to start a simple HTTP server (without encryption) or one with TLS encryption. It depends on what the user gives as mode and how conduit-unix is configured.
To create a simple HTTP server listening on port 8089:
let run = create (`TCP 8080)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 a function that logs the exception using the Logs library).