network-transport-0.5.9: Network abstraction layer
Safe HaskellNone
LanguageHaskell2010

Network.Transport

Description

Network Transport

Synopsis

Types

data Transport Source #

To create a network abstraction layer, use one of the Network.Transport.* packages.

Constructors

Transport 

Fields

data EndPoint Source #

Network endpoint.

Constructors

EndPoint 

Fields

data Connection Source #

Lightweight connection to an endpoint.

Constructors

Connection 

Fields

  • send :: [ByteString] -> IO (Either (TransportError SendErrorCode) ())

    Send a message on this connection.

    send provides vectored I/O, and allows multiple data segments to be sent using a single call (cf. sendMany). Note that this segment structure is entirely unrelated to the segment structure returned by a Received event.

  • close :: IO ()

    Close the connection.

data Event Source #

Event on an endpoint.

Constructors

Received !ConnectionId [ByteString]

Received a message

ConnectionClosed !ConnectionId

Connection closed

ConnectionOpened !ConnectionId Reliability EndPointAddress

Connection opened

ConnectionIds need not be allocated contiguously.

ReceivedMulticast MulticastAddress [ByteString]

Received multicast

EndPointClosed

The endpoint got closed (manually, by a call to closeEndPoint or closeTransport)

ErrorEvent (TransportError EventErrorCode)

An error occurred

Instances

Instances details
Binary Event Source # 
Instance details

Defined in Network.Transport

Methods

put :: Event -> Put

get :: Get Event

putList :: [Event] -> Put

Generic Event Source # 
Instance details

Defined in Network.Transport

Associated Types

type Rep Event 
Instance details

Defined in Network.Transport

type Rep Event = D1 ('MetaData "Event" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'False) ((C1 ('MetaCons "Received" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (Rec0 ConnectionId) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [ByteString])) :+: (C1 ('MetaCons "ConnectionClosed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (Rec0 ConnectionId)) :+: C1 ('MetaCons "ConnectionOpened" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (Rec0 ConnectionId) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Reliability) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 EndPointAddress))))) :+: (C1 ('MetaCons "ReceivedMulticast" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 MulticastAddress) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [ByteString])) :+: (C1 ('MetaCons "EndPointClosed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ErrorEvent" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (TransportError EventErrorCode))))))

Methods

from :: Event -> Rep Event x

to :: Rep Event x -> Event

Show Event Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> Event -> ShowS

show :: Event -> String

showList :: [Event] -> ShowS

Eq Event Source # 
Instance details

Defined in Network.Transport

Methods

(==) :: Event -> Event -> Bool

(/=) :: Event -> Event -> Bool

type Rep Event Source # 
Instance details

Defined in Network.Transport

type Rep Event = D1 ('MetaData "Event" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'False) ((C1 ('MetaCons "Received" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (Rec0 ConnectionId) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [ByteString])) :+: (C1 ('MetaCons "ConnectionClosed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (Rec0 ConnectionId)) :+: C1 ('MetaCons "ConnectionOpened" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (Rec0 ConnectionId) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Reliability) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 EndPointAddress))))) :+: (C1 ('MetaCons "ReceivedMulticast" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 MulticastAddress) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [ByteString])) :+: (C1 ('MetaCons "EndPointClosed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ErrorEvent" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (TransportError EventErrorCode))))))

type ConnectionId = Word64 Source #

Connection data ConnectHintsIDs enable receivers to distinguish one connection from another.

data Reliability Source #

Reliability guarantees of a connection.

Instances

Instances details
Binary Reliability Source # 
Instance details

Defined in Network.Transport

Methods

put :: Reliability -> Put

get :: Get Reliability

putList :: [Reliability] -> Put

Generic Reliability Source # 
Instance details

Defined in Network.Transport

Associated Types

type Rep Reliability 
Instance details

Defined in Network.Transport

type Rep Reliability = D1 ('MetaData "Reliability" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'False) (C1 ('MetaCons "ReliableOrdered" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ReliableUnordered" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Unreliable" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: Reliability -> Rep Reliability x

to :: Rep Reliability x -> Reliability

Show Reliability Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> Reliability -> ShowS

show :: Reliability -> String

showList :: [Reliability] -> ShowS

Eq Reliability Source # 
Instance details

Defined in Network.Transport

Methods

(==) :: Reliability -> Reliability -> Bool

(/=) :: Reliability -> Reliability -> Bool

type Rep Reliability Source # 
Instance details

Defined in Network.Transport

type Rep Reliability = D1 ('MetaData "Reliability" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'False) (C1 ('MetaCons "ReliableOrdered" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ReliableUnordered" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Unreliable" 'PrefixI 'False) (U1 :: Type -> Type)))

data MulticastGroup Source #

Multicast group.

Constructors

MulticastGroup 

Fields

newtype EndPointAddress Source #

EndPointAddress of an endpoint.

Constructors

EndPointAddress 

Fields

Instances

Instances details
Binary EndPointAddress Source # 
Instance details

Defined in Network.Transport

Methods

put :: EndPointAddress -> Put

get :: Get EndPointAddress

putList :: [EndPointAddress] -> Put

NFData EndPointAddress Source # 
Instance details

Defined in Network.Transport

Methods

rnf :: EndPointAddress -> ()

Data EndPointAddress Source # 
Instance details

Defined in Network.Transport

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> EndPointAddress -> c EndPointAddress

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c EndPointAddress

toConstr :: EndPointAddress -> Constr

dataTypeOf :: EndPointAddress -> DataType

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c EndPointAddress)

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EndPointAddress)

gmapT :: (forall b. Data b => b -> b) -> EndPointAddress -> EndPointAddress

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EndPointAddress -> r

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EndPointAddress -> r

gmapQ :: (forall d. Data d => d -> u) -> EndPointAddress -> [u]

gmapQi :: Int -> (forall d. Data d => d -> u) -> EndPointAddress -> u

gmapM :: Monad m => (forall d. Data d => d -> m d) -> EndPointAddress -> m EndPointAddress

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> EndPointAddress -> m EndPointAddress

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> EndPointAddress -> m EndPointAddress

Show EndPointAddress Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> EndPointAddress -> ShowS

show :: EndPointAddress -> String

showList :: [EndPointAddress] -> ShowS

Eq EndPointAddress Source # 
Instance details

Defined in Network.Transport

Ord EndPointAddress Source # 
Instance details

Defined in Network.Transport

Hashable EndPointAddress Source # 
Instance details

Defined in Network.Transport

Methods

hashWithSalt :: Int -> EndPointAddress -> Int

hash :: EndPointAddress -> Int

newtype MulticastAddress Source #

EndPointAddress of a multicast group.

Constructors

MulticastAddress 

Fields

Instances

Instances details
Binary MulticastAddress Source # 
Instance details

Defined in Network.Transport

Generic MulticastAddress Source # 
Instance details

Defined in Network.Transport

Associated Types

type Rep MulticastAddress 
Instance details

Defined in Network.Transport

type Rep MulticastAddress = D1 ('MetaData "MulticastAddress" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'True) (C1 ('MetaCons "MulticastAddress" 'PrefixI 'True) (S1 ('MetaSel ('Just "multicastAddressToByteString") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))
Show MulticastAddress Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> MulticastAddress -> ShowS

show :: MulticastAddress -> String

showList :: [MulticastAddress] -> ShowS

Eq MulticastAddress Source # 
Instance details

Defined in Network.Transport

Ord MulticastAddress Source # 
Instance details

Defined in Network.Transport

type Rep MulticastAddress Source # 
Instance details

Defined in Network.Transport

type Rep MulticastAddress = D1 ('MetaData "MulticastAddress" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'True) (C1 ('MetaCons "MulticastAddress" 'PrefixI 'True) (S1 ('MetaSel ('Just "multicastAddressToByteString") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

Hints

data ConnectHints Source #

Hints used by connect

Constructors

ConnectHints 

Fields

defaultConnectHints :: ConnectHints Source #

Default hints for connecting

Error codes

data TransportError error Source #

Errors returned by Network.Transport API functions consist of an error code and a human readable description of the problem

Constructors

TransportError error String 

Instances

Instances details
Binary error => Binary (TransportError error) Source # 
Instance details

Defined in Network.Transport

Methods

put :: TransportError error -> Put

get :: Get (TransportError error)

putList :: [TransportError error] -> Put

(Typeable err, Show err) => Exception (TransportError err) Source #

Although the functions in the transport API never throw TransportErrors (but return them explicitly), application code may want to turn these into exceptions.

Instance details

Defined in Network.Transport

Methods

toException :: TransportError err -> SomeException

fromException :: SomeException -> Maybe (TransportError err)

displayException :: TransportError err -> String

backtraceDesired :: TransportError err -> Bool

Generic (TransportError error) Source # 
Instance details

Defined in Network.Transport

Associated Types

type Rep (TransportError error) 
Instance details

Defined in Network.Transport

type Rep (TransportError error) = D1 ('MetaData "TransportError" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'False) (C1 ('MetaCons "TransportError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 error) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))

Methods

from :: TransportError error -> Rep (TransportError error) x

to :: Rep (TransportError error) x -> TransportError error

Show error => Show (TransportError error) Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> TransportError error -> ShowS

show :: TransportError error -> String

showList :: [TransportError error] -> ShowS

Eq error => Eq (TransportError error) Source #

When comparing errors we ignore the human-readable strings

Instance details

Defined in Network.Transport

Methods

(==) :: TransportError error -> TransportError error -> Bool

(/=) :: TransportError error -> TransportError error -> Bool

type Rep (TransportError error) Source # 
Instance details

Defined in Network.Transport

type Rep (TransportError error) = D1 ('MetaData "TransportError" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'False) (C1 ('MetaCons "TransportError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 error) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))

data NewEndPointErrorCode Source #

Errors during the creation of an endpoint

Constructors

NewEndPointInsufficientResources

Not enough resources

NewEndPointFailed

Failed for some other reason

Instances

Instances details
Show NewEndPointErrorCode Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> NewEndPointErrorCode -> ShowS

show :: NewEndPointErrorCode -> String

showList :: [NewEndPointErrorCode] -> ShowS

Eq NewEndPointErrorCode Source # 
Instance details

Defined in Network.Transport

data ConnectErrorCode Source #

Connection failure

Constructors

ConnectNotFound

Could not resolve the address

ConnectInsufficientResources

Insufficient resources (for instance, no more sockets available)

ConnectTimeout

Timeout

ConnectFailed

Failed for other reasons (including syntax error)

Instances

Instances details
Show ConnectErrorCode Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> ConnectErrorCode -> ShowS

show :: ConnectErrorCode -> String

showList :: [ConnectErrorCode] -> ShowS

Eq ConnectErrorCode Source # 
Instance details

Defined in Network.Transport

data NewMulticastGroupErrorCode Source #

Failure during the creation of a new multicast group

Constructors

NewMulticastGroupInsufficientResources

Insufficient resources

NewMulticastGroupFailed

Failed for some other reason

NewMulticastGroupUnsupported

Not all transport implementations support multicast

data ResolveMulticastGroupErrorCode Source #

Failure during the resolution of a multicast group

Constructors

ResolveMulticastGroupNotFound

Multicast group not found

ResolveMulticastGroupFailed

Failed for some other reason (including syntax error)

ResolveMulticastGroupUnsupported

Not all transport implementations support multicast

data SendErrorCode Source #

Failure during sending a message

Constructors

SendClosed

Connection was closed

SendFailed

Send failed for some other reason

Instances

Instances details
Show SendErrorCode Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> SendErrorCode -> ShowS

show :: SendErrorCode -> String

showList :: [SendErrorCode] -> ShowS

Eq SendErrorCode Source # 
Instance details

Defined in Network.Transport

data EventErrorCode Source #

Error codes used when reporting errors to endpoints (through receive)

Constructors

EventEndPointFailed

Failure of the entire endpoint

EventTransportFailed

Transport-wide fatal error

EventConnectionLost EndPointAddress

We lost connection to another endpoint

Although Network.Transport provides multiple independent lightweight connections between endpoints, those connections cannot fail independently: once one connection has failed, all connections, in both directions, must now be considered to have failed; they fail as a "bundle" of connections, with only a single "bundle" of connections per endpoint at any point in time.

That is, suppose there are multiple connections in either direction between endpoints A and B, and A receives a notification that it has lost contact with B. Then A must not be able to send any further messages to B on existing connections.

Although B may not realize immediately that its connection to A has been broken, messages sent by B on existing connections should not be delivered, and B must eventually get an EventConnectionLost message, too.

Moreover, this event must be posted before A has successfully reconnected (in other words, if B notices a reconnection attempt from A, it must post the EventConnectionLost before acknowledging the connection from A) so that B will not receive events about new connections or incoming messages from A without realizing that it got disconnected.

If B attempts to establish another connection to A before it realized that it got disconnected from A then it's okay for this connection attempt to fail, and the EventConnectionLost to be posted at that point, or for the EventConnectionLost to be posted and for the new connection to be considered the first connection of the "new bundle".

Instances

Instances details
Binary EventErrorCode Source # 
Instance details

Defined in Network.Transport

Methods

put :: EventErrorCode -> Put

get :: Get EventErrorCode

putList :: [EventErrorCode] -> Put

Generic EventErrorCode Source # 
Instance details

Defined in Network.Transport

Associated Types

type Rep EventErrorCode 
Instance details

Defined in Network.Transport

type Rep EventErrorCode = D1 ('MetaData "EventErrorCode" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'False) (C1 ('MetaCons "EventEndPointFailed" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "EventTransportFailed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "EventConnectionLost" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 EndPointAddress))))
Show EventErrorCode Source # 
Instance details

Defined in Network.Transport

Methods

showsPrec :: Int -> EventErrorCode -> ShowS

show :: EventErrorCode -> String

showList :: [EventErrorCode] -> ShowS

Eq EventErrorCode Source # 
Instance details

Defined in Network.Transport

type Rep EventErrorCode Source # 
Instance details

Defined in Network.Transport

type Rep EventErrorCode = D1 ('MetaData "EventErrorCode" "Network.Transport" "network-transport-0.5.9-YXtLfw9lzWCfMiE2XZ4lC" 'False) (C1 ('MetaCons "EventEndPointFailed" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "EventTransportFailed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "EventConnectionLost" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 EndPointAddress))))