Network.Transport
is a Network Abstraction Layer which provides
the following high-level concepts:
Nodes in the network are represented by EndPoint
s. 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, where as EndPoint
s and connections cannot.
Connections between EndPoint
s 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, EndPoint
s are notified of
other Event
s 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-*).