The Conduit
library abstracts the concerns of establishing connections to peers that may be running within the same host (e.g. in another virtual machine) or on a remote host via TCP. It consists of:
Conduit
module with basic type definitions for endpointsResolver
module for mapping URIs to endpointsConnections are created by identifying remote nodes using an endp value. To ensure portability, the endpoints are translated into concrete connections by separate modules that target Lwt_unix
, Async
and Mirage
. This lets those backends use the appropriate local technique for creating the connection (such as using OpenSSL on Unix, or a pure OCaml TLS+TCP implementation on Mirage, or some other combination).
The modules dealing with connection establishment are:
Conduit_lwt_unix
Conduit_async
Conduit_mirage
This deals with resolving URIs into a list of endp addresses that can then be connected to by the connection establishment modules.
All of the name resolvers conform to the Resolver.S
module type. The OS-specific implementations of this interface are:
Resolver_lwt
Resolver_lwt_unix
Resolver_mirage
On Mirage, the networking stack is configured via the application of functors to satisfy various signatures. Some of the available functors are:
Conduit_xenstore
Conduit_localhost
indexlist