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: - The {!Conduit} module with basic type definitions for endpoints - OS-specific modules for {{!transport}establishing individual connections} - The {!Resolver} module for mapping URIs to endpoints - OS-specific {{!resolution}name resolvers} that use available resolution mechanisms {2:transport Connection Establishment} Connections are created by identifying remote nodes using an {{!Conduit.endp}endp} value. To ensure portability, the {{!Conduit.endp}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: {!modules: Conduit_lwt_unix Conduit_async Conduit_mirage} {2:resolution Name Resolution} This deals with resolving URIs into a list of {{!Conduit.endp}endp} addresses that can then be connected to by the {{!transport}connection establishment} modules. All of the name resolvers conform to the {!Resolver.S} module type. The OS-specific implementations of this interface are: {!modules: Resolver_lwt Resolver_lwt_unix Resolver_mirage} {2:resolution Mirage Connections} On Mirage, the networking stack is configured via the application of functors to satisfy various signatures. Some of the available functors are: {!modules: Conduit_xenstore Conduit_localhost} {!indexlist}