Network.Transport is a Network Abstraction Layer which provides
the following high-level concepts:
.
* Nodes in the network are represented by EndPoints. These are
heavyweight stateful objects.
.
* Each EndPoint has an EndPointAddress.
.
* Connections can be established from one EndPoint to another
using the EndPointAddress of the remote end.
.
* The EndPointAddress can be serialised and sent over the
network, whereas EndPoints and connections cannot.
.
* Connections between EndPoints are unidirectional and lightweight.
.
* Outgoing messages are sent via a Connection object that
represents the sending end of the connection.
.
* Incoming messages for all of the incoming connections on
an EndPoint are collected via a shared receive queue.
.
* In addition to incoming messages, EndPoints are notified of
other Events such as new connections or broken connections.
.
This design was heavily influenced by the design of the Common
Communication Interface
(http://www.olcf.ornl.gov/center-projects/common-communication-interface).
Important design goals are:
.
* Connections should be lightweight: it should be no problem to
create thousands of connections between endpoints.
.
* Error handling is explicit: every function declares as part of
its type which errors it can return (no exceptions are thrown)
.
* Error handling is "abstract": errors that originate from
implementation specific problems (such as "no more sockets" in
the TCP implementation) get mapped to generic errors
("insufficient resources") at the Transport level.
.
This package provides the generic interface only; you will
probably also want to install at least one transport
implementation (network-transport-*).