DNS client and server implementation in pure OCaml
Library dns
Module type Dns . Protocol . CLIENT
type context
val get_id : unit -> int
val marshal : ?alloc:( unit -> Cstruct.t ) -> Packet.t -> (context * Cstruct.t) list

marshal query is a list of context-buffer pairs corresponding to the channel contexts and request buffers with which to attempt DNS requests. Requests are made in parallel and the first response to successfully parse is returned as the answer. Lagging requests are kept running until successful parse or timeout. With this behavior, it is easy to construct low-latency but network-environment-aware DNS resolvers.

val parse : context -> Cstruct.t -> Packet.t option

parse ctxt buf is the potential packet extracted out of buf with ctxt

val timeout : context -> exn

timeout ctxt is the exception resulting from a context ctxt that has timed-out