"Network.Transport" is a Network Abstraction Layer which provides the following
- Nodes in the network are represented by 'EndPoint's. These are heavyweight
'EndPointAddress' of the remote end.
- The 'EndPointAddress' can be serialised and sent over the network, where as
'EndPoint's and connections cannot.
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
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-*).