This module provides a TCP server that multiplexes incoming and outgoing messages from many connected peers onto a single pair of input and output channels. The socket address of the peer is used to identify the source and destination of messages.
This interface introduces a new error condition: that a message on the outgoing channel has a socket address for which no socket exists. This may occur because of incorrect usage of this library, or because a peer disconnected after the client placed a message on the outgoing channel, but before that message was sent. Currently, the server does not notify its caller of the occurrence of this error.
- muxedTCPServer :: Show a => ServerPortNumber -> TCPMessageDriver a b -> IO (MultiplexedProcess a b)
- type MultiplexedProcess a b = Process (TCPMessage a) (SockAddr, b) IOException
- data TCPMessage a
Documentation
muxedTCPServer :: Show a => ServerPortNumber -> TCPMessageDriver a b -> IO (MultiplexedProcess a b)Source
Runs a TCP server returning a process that outputs messages of type a
from connected peers, tagged with
their SockAddr
, and accepts messages of type b
for peers, again tagged with their SockAddr
.
type MultiplexedProcess a b = Process (TCPMessage a) (SockAddr, b) IOExceptionSource
A multiplexed process has inputs and outputs that are tagged with the SockAddr
of the
sending or receiving peer, and carries connection start and connection end events.
data TCPMessage a Source
The type of externally visible events that may occur for the multiplexed TCP server.
ConnectionEstablished SockAddr | A connection to a peer with the given address is established. |
ConnectionTerminated SockAddr IOException | A connection with the given address is terminated, due to the given exception. |
PeerMessage SockAddr a | A message of type |
Eq a => Eq (TCPMessage a) | |
Show a => Show (TCPMessage a) |