Safe Haskell | None |
---|---|
Language | Haskell98 |
Support for defining custom transport mechanisms. Most users will not need to care about the types defined in this module.
- class Transport t where
- data TransportOptions t :: *
- transportDefaultOptions :: TransportOptions t
- transportPut :: t -> ByteString -> IO ()
- transportGet :: t -> Int -> IO ByteString
- transportClose :: t -> IO ()
- class Transport t => TransportOpen t where
- transportOpen :: TransportOptions t -> Address -> IO t
- class Transport t => TransportListen t where
- data TransportListener t :: *
- transportListen :: TransportOptions t -> Address -> IO (TransportListener t)
- transportAccept :: TransportListener t -> IO t
- transportListenerClose :: TransportListener t -> IO ()
- transportListenerAddress :: TransportListener t -> Address
- transportListenerUUID :: TransportListener t -> UUID
- data TransportError
- transportError :: String -> TransportError
- transportErrorMessage :: TransportError -> String
- transportErrorAddress :: TransportError -> Maybe Address
- data SocketTransport
- socketTransportOptionBacklog :: TransportOptions SocketTransport -> Int
- socketTransportCredentials :: SocketTransport -> IO (CUInt, CUInt, CUInt)
Transports
class Transport t where Source
A Transport
can exchange bytes with a remote peer.
data TransportOptions t :: * Source
Additional options that this transport type may use when establishing a connection.
transportDefaultOptions :: TransportOptions t Source
Default values for this transport's options.
transportPut :: t -> ByteString -> IO () Source
Send a ByteString
over the transport.
Throws a TransportError
if an error occurs.
transportGet :: t -> Int -> IO ByteString Source
Receive a ByteString
of the given size from the transport. The
transport should block until sufficient bytes are available, and
only return fewer than the requested amount if there will not be
any more data.
Throws a TransportError
if an error occurs.
transportClose :: t -> IO () Source
Close an open transport, and release any associated resources or handles.
class Transport t => TransportOpen t where Source
A Transport
which can open a connection to a remote peer.
transportOpen :: TransportOptions t -> Address -> IO t Source
Open a connection to the given address, using the given options.
Throws a TransportError
if the connection could not be
established.
class Transport t => TransportListen t where Source
A Transport
which can listen for and accept connections from remote
peers.
data TransportListener t :: * Source
Used for transports that listen on a port or address.
transportListen :: TransportOptions t -> Address -> IO (TransportListener t) Source
Begin listening for connections on the given address, using the given options.
Throws a TransportError
if it's not possible to listen at that
address (for example, if the port is already in use).
transportAccept :: TransportListener t -> IO t Source
Accept a new connection.
Throws a TransportError
if some error happens before the
transport is ready to exchange bytes.
transportListenerClose :: TransportListener t -> IO () Source
Close an open listener.
transportListenerAddress :: TransportListener t -> Address Source
Get the address to use to connect to a listener.
transportListenerUUID :: TransportListener t -> UUID Source
Get the UUID allocated to this transport listener.
See randomUUID
.
Transport errors
data TransportError Source
Thrown from transport methods when an error occurs.
Socket transport
data SocketTransport Source
Supports connecting over Unix or TCP sockets.
Unix sockets are similar to pipes, but exist as special files in the filesystem. On Linux, abstract sockets have a path-like address, but do not actually have entries in the filesystem.
TCP sockets may use either IPv4 or IPv6.
socketTransportOptionBacklog :: TransportOptions SocketTransport -> Int Source
The maximum size of the connection queue for a listening socket.
socketTransportCredentials :: SocketTransport -> IO (CUInt, CUInt, CUInt) Source
Returns the processID, userID, and groupID of the socket's peer.
See getPeerCred
.