nettle-openflow-0.1: High level configuration and control of computer networks.



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)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 a has been received from the peer with the given address.


Eq a => Eq (TCPMessage a) 
Show a => Show (TCPMessage a)