diff --git a/dev/index.html b/dev/index.html index c6140b78..3bd4205b 100644 --- a/dev/index.html +++ b/dev/index.html @@ -13,6 +13,7 @@
  1. tiny_httpd 0.13
  2. tiny_httpd_camlzip 0.13
  3. +
  4. tiny_httpd_eio 0.13
diff --git a/dev/tiny_httpd/Tiny_httpd/index.html b/dev/tiny_httpd/Tiny_httpd/index.html index 0b3a4921..28d78121 100644 --- a/dev/tiny_httpd/Tiny_httpd/index.html +++ b/dev/tiny_httpd/Tiny_httpd/index.html @@ -49,7 +49,7 @@ echo: Accept: */* Content-Length: 10 Content-Type: application/x-www-form-urlencoded; - path="/echo"; body="howdy y'all"}

Tiny buffer implementation

These buffers are used to avoid allocating too many byte arrays when processing streams and parsing requests.

module Buf = Tiny_httpd_buf

Generic byte streams

module Byte_stream = Tiny_httpd_stream

IO Abstraction

module IO = Tiny_httpd_io

Main Server Type

type buf = Tiny_httpd_buf.t
type byte_stream = Tiny_httpd_stream.t
HTTP Methods
Headers

Headers are metadata associated with a request or response.

module Headers = Tiny_httpd_server.Headers
Requests

Requests are sent by a client, e.g. a web browser or cURL. From the point of view of the server, they're inputs.

module Request = Tiny_httpd_server.Request
Response Codes
module Response_code = Tiny_httpd_server.Response_code
Responses

Responses are what a http server, such as Tiny_httpd, send back to the client to answer a Request.t

module Response = Tiny_httpd_server.Response
Routing

Basic type-safe routing of handlers based on URL paths. This is optional, it is possible to only define the root handler with something like Routes.

Middlewares

A middleware can be inserted in a handler to modify or observe its behavior.

module Middleware = Tiny_httpd_server.Middleware
Main Server type

A HTTP server. See create for more details.

val create : + path="/echo"; body="howdy y'all"}

Tiny buffer implementation

These buffers are used to avoid allocating too many byte arrays when processing streams and parsing requests.

module Buf = Tiny_httpd_buf

Generic byte streams

module Byte_stream = Tiny_httpd_stream

IO Abstraction

module IO = Tiny_httpd_io

Main Server Type

type buf = Tiny_httpd_buf.t
type byte_stream = Tiny_httpd_stream.t
HTTP Methods
Headers

Headers are metadata associated with a request or response.

module Headers = Tiny_httpd_server.Headers
Requests

Requests are sent by a client, e.g. a web browser or cURL. From the point of view of the server, they're inputs.

module Request = Tiny_httpd_server.Request
Response Codes
module Response_code = Tiny_httpd_server.Response_code
Responses

Responses are what a http server, such as Tiny_httpd, send back to the client to answer a Request.t

module Response = Tiny_httpd_server.Response
Routing

Basic type-safe routing of handlers based on URL paths. This is optional, it is possible to only define the root handler with something like Routes.

  • since 0.6
Middlewares

A middleware can be inserted in a handler to modify or observe its behavior.

  • since 0.11
module Middleware = Tiny_httpd_server.Middleware
Main Server type

A HTTP server. See create for more details.

val create : ?masksigpipe:bool -> ?max_connections:int -> ?timeout:float -> @@ -95,4 +95,4 @@ echo: t -> ('a, string Request.t -> server_sent_generator -> unit) Route.t -> 'a -> - unit

Add a handler on an endpoint, that serves server-sent events.

The callback is given a generator that can be used to send events as it pleases. The connection is always closed by the client, and the accepted method is always GET. This will set the header "content-type" to "text/event-stream" automatically and reply with a 200 immediately. See server_sent_generator for more details.

This handler stays on the original thread (it is synchronous).

  • since 0.9
Run the server
val running : t -> bool

Is the server running?

  • since NEXT_RELEASE
val stop : t -> unit

Ask the server to stop. This might not have an immediate effect as run might currently be waiting on IO.

val run : ?after_init:(unit -> unit) -> t -> (unit, exn) Stdlib.result

Run the main loop of the server, listening on a socket described at the server's creation time, using new_thread to start a thread for each new client.

This returns Ok () if the server exits gracefully, or Error e if it exits with an error.

  • parameter after_init

    is called after the server starts listening. since 0.13 .

Utils

module Util = Tiny_httpd_util

Static directory serving

module Dir = Tiny_httpd_dir
module Html = Tiny_httpd_html
\ No newline at end of file + unit

Add a handler on an endpoint, that serves server-sent events.

The callback is given a generator that can be used to send events as it pleases. The connection is always closed by the client, and the accepted method is always GET. This will set the header "content-type" to "text/event-stream" automatically and reply with a 200 immediately. See server_sent_generator for more details.

This handler stays on the original thread (it is synchronous).

  • since 0.9
Run the server
val running : t -> bool

Is the server running?

  • since NEXT_RELEASE
val stop : t -> unit

Ask the server to stop. This might not have an immediate effect as run might currently be waiting on IO.

val run : ?after_init:(unit -> unit) -> t -> (unit, exn) Stdlib.result

Run the main loop of the server, listening on a socket described at the server's creation time, using new_thread to start a thread for each new client.

This returns Ok () if the server exits gracefully, or Error e if it exits with an error.

  • parameter after_init

    is called after the server starts listening. since 0.13 .

Utils

module Util = Tiny_httpd_util

Resource pool

module Pool = Tiny_httpd_pool

Static directory serving

module Dir = Tiny_httpd_dir
module Html = Tiny_httpd_html
\ No newline at end of file diff --git a/dev/tiny_httpd/Tiny_httpd_atomic_/.dummy b/dev/tiny_httpd/Tiny_httpd_atomic_/.dummy new file mode 100644 index 00000000..e69de29b diff --git a/dev/tiny_httpd/Tiny_httpd_atomic_/index.html b/dev/tiny_httpd/Tiny_httpd_atomic_/index.html new file mode 100644 index 00000000..63f6c2dd --- /dev/null +++ b/dev/tiny_httpd/Tiny_httpd_atomic_/index.html @@ -0,0 +1,2 @@ + +Tiny_httpd_atomic_ (tiny_httpd.Tiny_httpd_atomic_)

Module Tiny_httpd_atomic_

include module type of struct include Stdlib.Atomic end
type !'a t = 'a Stdlib__Atomic.t
val make : 'a -> 'a t
val get : 'a t -> 'a
val set : 'a t -> 'a -> unit
val exchange : 'a t -> 'a -> 'a
val compare_and_set : 'a t -> 'a -> 'a -> bool
val fetch_and_add : int t -> int -> int
val incr : int t -> unit
val decr : int t -> unit
\ No newline at end of file diff --git a/dev/tiny_httpd/Tiny_httpd_html_/A/index.html b/dev/tiny_httpd/Tiny_httpd_html_/A/index.html new file mode 100644 index 00000000..48a2a04e --- /dev/null +++ b/dev/tiny_httpd/Tiny_httpd_html_/A/index.html @@ -0,0 +1,2 @@ + +A (tiny_httpd.Tiny_httpd_html_.A)

Module Tiny_httpd_html_.A

Attributes.

This module contains combinator for the standard attributes. One can also just use a pair of strings.

type t = string -> attribute

Attribute builder

val accept : t

Attribute "accept".

val accept_charset : t

Attribute "accept-charset".

val accesskey : t

Attribute "accesskey".

val action : t

Attribute "action".

val align : t

Attribute "align".

val allow : t

Attribute "allow".

val alt : t

Attribute "alt".

val async : t

Attribute "async".

val autocapitalize : t

Attribute "autocapitalize".

val autocomplete : t

Attribute "autocomplete".

val autofocus : t

Attribute "autofocus".

val autoplay : t

Attribute "autoplay".

val buffered : t

Attribute "buffered".

val capture : t

Attribute "capture".

val challenge : t

Attribute "challenge".

val charset : t

Attribute "charset".

val checked : t

Attribute "checked".

val cite : t

Attribute "cite".

val class_ : t

Attribute "class".

val code : t

Attribute "code".

val codebase : t

Attribute "codebase".

val cols : t

Attribute "cols".

val colspan : t

Attribute "colspan".

val content : t

Attribute "content".

val contenteditable : t

Attribute "contenteditable".

val contextmenu : t

Attribute "contextmenu".

val controls : t

Attribute "controls".

val coords : t

Attribute "coords".

val crossorigin : t

Attribute "crossorigin".

val csp : t

Attribute "csp".

val data : t

Attribute "data".

val data_star : t

Attribute "data-*".

val datetime : t

Attribute "datetime".

val decoding : t

Attribute "decoding".

val default : t

Attribute "default".

val defer : t

Attribute "defer".

val dir : t

Attribute "dir".

val dirname : t

Attribute "dirname".

val disabled : t

Attribute "disabled".

val download : t

Attribute "download".

val draggable : t

Attribute "draggable".

val enctype : t

Attribute "enctype".

val enterkeyhint : t

Attribute "enterkeyhint".

val for_ : t

Attribute "for".

val form : t

Attribute "form".

val formaction : t

Attribute "formaction".

val formenctype : t

Attribute "formenctype".

val formmethod : t

Attribute "formmethod".

val formnovalidate : t

Attribute "formnovalidate".

val formtarget : t

Attribute "formtarget".

val headers : t

Attribute "headers".

val hidden : t

Attribute "hidden".

val high : t

Attribute "high".

val href : t

Attribute "href".

val hreflang : t

Attribute "hreflang".

val http_equiv : t

Attribute "http-equiv".

val icon : t

Attribute "icon".

val id : t

Attribute "id".

val importance : t

Attribute "importance".

val integrity : t

Attribute "integrity".

val ismap : t

Attribute "ismap".

val itemprop : t

Attribute "itemprop".

val keytype : t

Attribute "keytype".

val kind : t

Attribute "kind".

val label : t

Attribute "label".

val lang : t

Attribute "lang".

val language : t

Attribute "language".

val list : t

Attribute "list".

val loop : t

Attribute "loop".

val low : t

Attribute "low".

val manifest : t

Attribute "manifest".

val max : t

Attribute "max".

val maxlength : t

Attribute "maxlength".

val minlength : t

Attribute "minlength".

val media : t

Attribute "media".

val method_ : t

Attribute "method".

val min : t

Attribute "min".

val multiple : t

Attribute "multiple".

val muted : t

Attribute "muted".

val name : t

Attribute "name".

val novalidate : t

Attribute "novalidate".

val open_ : t

Attribute "open".

val optimum : t

Attribute "optimum".

val pattern : t

Attribute "pattern".

val ping : t

Attribute "ping".

val placeholder : t

Attribute "placeholder".

val poster : t

Attribute "poster".

val preload : t

Attribute "preload".

val radiogroup : t

Attribute "radiogroup".

val readonly : t

Attribute "readonly".

val referrerpolicy : t

Attribute "referrerpolicy".

val rel : t

Attribute "rel".

val required : t

Attribute "required".

val reversed : t

Attribute "reversed".

val rows : t

Attribute "rows".

val rowspan : t

Attribute "rowspan".

val sandbox : t

Attribute "sandbox".

val scope : t

Attribute "scope".

val scoped : t

Attribute "scoped".

val selected : t

Attribute "selected".

val shape : t

Attribute "shape".

val size : t

Attribute "size".

val sizes : t

Attribute "sizes".

val slot : t

Attribute "slot".

val span : t

Attribute "span".

val spellcheck : t

Attribute "spellcheck".

val src : t

Attribute "src".

val srcdoc : t

Attribute "srcdoc".

val srclang : t

Attribute "srclang".

val srcset : t

Attribute "srcset".

val start : t

Attribute "start".

val step : t

Attribute "step".

val style : t

Attribute "style".

val summary : t

Attribute "summary".

val tabindex : t

Attribute "tabindex".

val target : t

Attribute "target".

val title : t

Attribute "title".

val translate : t

Attribute "translate".

val text : t

Attribute "Text".

val type_ : t

Attribute "type".

val usemap : t

Attribute "usemap".

val value : t

Attribute "value".

val width : t

Attribute "width".

val wrap : t

Attribute "wrap".

\ No newline at end of file diff --git a/dev/tiny_httpd/Tiny_httpd_html_/Out/index.html b/dev/tiny_httpd/Tiny_httpd_html_/Out/index.html new file mode 100644 index 00000000..e3a7915e --- /dev/null +++ b/dev/tiny_httpd/Tiny_httpd_html_/Out/index.html @@ -0,0 +1,2 @@ + +Out (tiny_httpd.Tiny_httpd_html_.Out)

Module Tiny_httpd_html_.Out

Output for HTML combinators.

This output type is used to produce a string reasonably efficiently from a tree of combinators.

type t
val create : unit -> t
val clear : t -> unit
val add_char : t -> char -> unit
val add_string : t -> string -> unit
val add_format_nl : t -> unit
val with_no_format_nl : t -> (unit -> 'a) -> 'a
val to_string : t -> string
\ No newline at end of file diff --git a/dev/tiny_httpd/Tiny_httpd_pool/.dummy b/dev/tiny_httpd/Tiny_httpd_pool/.dummy new file mode 100644 index 00000000..e69de29b diff --git a/dev/tiny_httpd/Tiny_httpd_pool/index.html b/dev/tiny_httpd/Tiny_httpd_pool/index.html new file mode 100644 index 00000000..6e38e97e --- /dev/null +++ b/dev/tiny_httpd/Tiny_httpd_pool/index.html @@ -0,0 +1,7 @@ + +Tiny_httpd_pool (tiny_httpd.Tiny_httpd_pool)

Module Tiny_httpd_pool

Resource pool.

This pool is used for buffers. It can be used for other resources but do note that it assumes resources are still reasonably cheap to produce and discard, and will never block waiting for a resource — it's not a good pool for DB connections.

type 'a t

Pool of values of type 'a

val create : + ?clear:('a -> unit) -> + mk_item:(unit -> 'a) -> + ?max_size:int -> + unit -> + 'a t

Create a new pool.

  • parameter mk_item

    produce a new item in case the pool is empty

  • parameter max_size

    maximum number of item in the pool before we start dropping resources on the floor. This controls resource consumption.

  • parameter clear

    a function called on items before recycling them.

val with_resource : 'a t -> ('a -> 'b) -> 'b

with_resource pool f runs f x with x a resource; when f fails or returns, x is returned to the pool for future reuse.

\ No newline at end of file diff --git a/dev/tiny_httpd/Tiny_httpd_server/Request/index.html b/dev/tiny_httpd/Tiny_httpd_server/Request/index.html index 4c7d4f52..9bf6ffcf 100644 --- a/dev/tiny_httpd/Tiny_httpd_server/Request/index.html +++ b/dev/tiny_httpd/Tiny_httpd_server/Request/index.html @@ -1,2 +1,6 @@ -Request (tiny_httpd.Tiny_httpd_server.Request)

Module Tiny_httpd_server.Request

type 'body t = private {
  1. meth : Meth.t;
    (*

    HTTP method for this request.

    *)
  2. host : string;
    (*

    Host header, mandatory. It can also be found in headers.

    *)
  3. headers : Headers.t;
    (*

    List of headers.

    *)
  4. http_version : int * int;
    (*

    HTTP version. This should be either 1, 0 or 1, 1.

    *)
  5. path : string;
    (*

    Full path of the requested URL.

    *)
  6. path_components : string list;
    (*

    Components of the path of the requested URL.

    *)
  7. query : (string * string) list;
    (*

    Query part of the requested URL.

    *)
  8. body : 'body;
    (*

    Body of the request.

    *)
  9. start_time : float;
    (*

    Obtained via get_time_s in create

    • since 0.11
    *)
}

A request with method, path, host, headers, and a body, sent by a client.

The body is polymorphic because the request goes through several transformations. First it has no body, as only the request and headers are read; then it has a stream body; then the body might be entirely read as a string via read_body_full.

  • since 0.6 The field [query] was added and contains the query parameters in ["?foo=bar,x=y"]
  • since 0.6 The field [path_components] is the part of the path that precedes [query] and is split on ["/"].
  • since 0.11 the type is a private alias
  • since 0.11 the field [start_time] was added
val pp : Stdlib.Format.formatter -> string t -> unit

Pretty print the request and its body. The exact format of this printing is not specified.

val pp_ : Stdlib.Format.formatter -> _ t -> unit

Pretty print the request without its body. The exact format of this printing is not specified.

val headers : _ t -> Headers.t

List of headers of the request, including "Host".

val get_header : ?f:(string -> string) -> _ t -> string -> string option

get_header req h looks up header h in req. It returns None if the header is not present. This is case insensitive and should be used rather than looking up h verbatim in headers.

val get_header_int : _ t -> string -> int option

Same as get_header but also performs a string to integer conversion.

val set_header : string -> string -> 'a t -> 'a t

set_header k v req sets k: v in the request req's headers.

val update_headers : (Headers.t -> Headers.t) -> 'a t -> 'a t

Modify headers using the given function.

  • since 0.11
val set_body : 'a -> _ t -> 'a t

set_body b req returns a new query whose body is b.

  • since 0.11
val host : _ t -> string

Host field of the request. It also appears in the headers.

val meth : _ t -> Meth.t

Method for the request.

val path : _ t -> string

Request path.

val query : _ t -> (string * string) list

Decode the query part of the path field.

  • since 0.4
val body : 'b t -> 'b

Request body, possibly empty.

val start_time : _ t -> float

time stamp (from Unix.gettimeofday) after parsing the first line of the request

  • since 0.11
val limit_body_size : max_size:int -> byte_stream t -> byte_stream t

Limit the body size to max_size bytes, or return a 413 error.

  • since 0.3
val read_body_full : ?buf_size:int -> byte_stream t -> string t

Read the whole body into a string. Potentially blocking.

  • parameter buf_size

    initial size of underlying buffer (since 0.11)

\ No newline at end of file +Request (tiny_httpd.Tiny_httpd_server.Request)

Module Tiny_httpd_server.Request

type 'body t = private {
  1. meth : Meth.t;
    (*

    HTTP method for this request.

    *)
  2. host : string;
    (*

    Host header, mandatory. It can also be found in headers.

    *)
  3. headers : Headers.t;
    (*

    List of headers.

    *)
  4. http_version : int * int;
    (*

    HTTP version. This should be either 1, 0 or 1, 1.

    *)
  5. path : string;
    (*

    Full path of the requested URL.

    *)
  6. path_components : string list;
    (*

    Components of the path of the requested URL.

    *)
  7. query : (string * string) list;
    (*

    Query part of the requested URL.

    *)
  8. body : 'body;
    (*

    Body of the request.

    *)
  9. start_time : float;
    (*

    Obtained via get_time_s in create

    • since 0.11
    *)
}

A request with method, path, host, headers, and a body, sent by a client.

The body is polymorphic because the request goes through several transformations. First it has no body, as only the request and headers are read; then it has a stream body; then the body might be entirely read as a string via read_body_full.

  • since 0.6 The field [query] was added and contains the query parameters in ["?foo=bar,x=y"]
  • since 0.6 The field [path_components] is the part of the path that precedes [query] and is split on ["/"].
  • since 0.11 the type is a private alias
  • since 0.11 the field [start_time] was added
val pp : Stdlib.Format.formatter -> string t -> unit

Pretty print the request and its body. The exact format of this printing is not specified.

val pp_ : Stdlib.Format.formatter -> _ t -> unit

Pretty print the request without its body. The exact format of this printing is not specified.

val headers : _ t -> Headers.t

List of headers of the request, including "Host".

val get_header : ?f:(string -> string) -> _ t -> string -> string option

get_header req h looks up header h in req. It returns None if the header is not present. This is case insensitive and should be used rather than looking up h verbatim in headers.

val get_header_int : _ t -> string -> int option

Same as get_header but also performs a string to integer conversion.

val set_header : string -> string -> 'a t -> 'a t

set_header k v req sets k: v in the request req's headers.

val update_headers : (Headers.t -> Headers.t) -> 'a t -> 'a t

Modify headers using the given function.

  • since 0.11
val set_body : 'a -> _ t -> 'a t

set_body b req returns a new query whose body is b.

  • since 0.11
val host : _ t -> string

Host field of the request. It also appears in the headers.

val meth : _ t -> Meth.t

Method for the request.

val path : _ t -> string

Request path.

val query : _ t -> (string * string) list

Decode the query part of the path field.

  • since 0.4
val body : 'b t -> 'b

Request body, possibly empty.

val start_time : _ t -> float

time stamp (from Unix.gettimeofday) after parsing the first line of the request

  • since 0.11
val limit_body_size : max_size:int -> byte_stream t -> byte_stream t

Limit the body size to max_size bytes, or return a 413 error.

  • since 0.3
val read_body_full : + ?buf:Tiny_httpd_buf.t -> + ?buf_size:int -> + byte_stream t -> + string t

Read the whole body into a string. Potentially blocking.

  • parameter buf_size

    initial size of underlying buffer (since 0.11)

  • parameter buf

    the initial buffer (since NEXT_RELEASE)

\ No newline at end of file diff --git a/dev/tiny_httpd/Tiny_httpd_server/module-type-IO_BACKEND/index.html b/dev/tiny_httpd/Tiny_httpd_server/module-type-IO_BACKEND/index.html index f5d23fff..d496f358 100644 --- a/dev/tiny_httpd/Tiny_httpd_server/module-type-IO_BACKEND/index.html +++ b/dev/tiny_httpd/Tiny_httpd_server/module-type-IO_BACKEND/index.html @@ -1,2 +1,2 @@ -IO_BACKEND (tiny_httpd.Tiny_httpd_server.IO_BACKEND)

Module type Tiny_httpd_server.IO_BACKEND

A backend that provides IO operations, network operations, etc.

val init_addr : unit -> string
val init_port : unit -> int
val spawn : (unit -> unit) -> unit

function used to spawn a new thread to handle a new client connection. By default it is Thread.create but one could use a thread pool instead.

val get_time_s : unit -> float

obtain the current timestamp in seconds.

val tcp_server : unit -> Tiny_httpd_io.TCP_server.builder

Server that can listen on a port and handle clients.

\ No newline at end of file +IO_BACKEND (tiny_httpd.Tiny_httpd_server.IO_BACKEND)

Module type Tiny_httpd_server.IO_BACKEND

A backend that provides IO operations, network operations, etc.

val init_addr : unit -> string
val init_port : unit -> int
val get_time_s : unit -> float

obtain the current timestamp in seconds.

val tcp_server : unit -> Tiny_httpd_io.TCP_server.builder

Server that can listen on a port and handle clients.

\ No newline at end of file diff --git a/dev/tiny_httpd/index.html b/dev/tiny_httpd/index.html index 7b372ec7..7c2791ca 100644 --- a/dev/tiny_httpd/index.html +++ b/dev/tiny_httpd/index.html @@ -1,2 +1,2 @@ -index (tiny_httpd.index)

tiny_httpd index

Library tiny_httpd

This library exposes the following toplevel modules:

\ No newline at end of file +index (tiny_httpd.index)

tiny_httpd index

Library tiny_httpd

This library exposes the following toplevel modules:

\ No newline at end of file diff --git a/dev/tiny_httpd_eio/Tiny_httpd_eio/.dummy b/dev/tiny_httpd_eio/Tiny_httpd_eio/.dummy new file mode 100644 index 00000000..e69de29b diff --git a/dev/tiny_httpd_eio/Tiny_httpd_eio/index.html b/dev/tiny_httpd_eio/Tiny_httpd_eio/index.html new file mode 100644 index 00000000..06f5f37e --- /dev/null +++ b/dev/tiny_httpd_eio/Tiny_httpd_eio/index.html @@ -0,0 +1,14 @@ + +Tiny_httpd_eio (tiny_httpd_eio.Tiny_httpd_eio)

Module Tiny_httpd_eio

Tiny httpd EIO backend.

This replaces the threads + Unix blocking syscalls of Tiny_httpd_server with an Eio-based cooperative system.

NOTE: this is very experimental and will absolutely change over time, especially since Eio itself is also subject to change.

type 'a with_args = + ?addr:string -> + ?port:int -> + ?max_connections:int -> + stdenv:Eio_unix.Stdenv.base -> + sw:Eio.Switch.t -> + 'a
val io_backend : (unit -> (module Tiny_httpd_server.IO_BACKEND)) with_args

Create a server

val create : + (?buf_size:int -> + ?middlewares: + ([ `Encoding | `Stage of int ] * Tiny_httpd_server.Middleware.t) list -> + unit -> + Tiny_httpd_server.t) + with_args

Create a server

\ No newline at end of file diff --git a/dev/tiny_httpd_eio/index.html b/dev/tiny_httpd_eio/index.html new file mode 100644 index 00000000..11b7f7f1 --- /dev/null +++ b/dev/tiny_httpd_eio/index.html @@ -0,0 +1,2 @@ + +index (tiny_httpd_eio.index)

tiny_httpd_eio index

Library tiny_httpd_eio

The entry point of this library is the module: Tiny_httpd_eio.

\ No newline at end of file