Safe Haskell | None |
---|---|
Language | Haskell2010 |
DBus.Transport
Description
Support for defining custom transport mechanisms. Most users will not need to care about the types defined in this module.
Synopsis
- class Transport t where
- data TransportOptions t
- transportDefaultOptions :: TransportOptions t
- transportPut :: t -> ByteString -> IO ()
- transportPutWithFds :: t -> ByteString -> [Fd] -> IO ()
- transportGet :: t -> Int -> IO ByteString
- transportGetWithFds :: t -> Int -> IO (ByteString, [Fd])
- 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 (Maybe CUInt, Maybe CUInt, Maybe CUInt)
Transports
A Transport
can exchange bytes with a remote peer.
Minimal complete definition
transportDefaultOptions, transportPut, transportGet, transportClose
Associated Types
data TransportOptions t #
Additional options that this transport type may use when establishing a connection.
Methods
transportDefaultOptions :: TransportOptions t #
Default values for this transport's options.
transportPut :: t -> ByteString -> IO () #
Send a ByteString
over the transport.
Throws a TransportError
if an error occurs.
transportPutWithFds :: t -> ByteString -> [Fd] -> IO () #
Send a ByteString
and Unix file descriptors over the transport.
Throws a TransportError
if an error occurs.
transportGet :: t -> Int -> IO ByteString #
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.
transportGetWithFds :: t -> Int -> IO (ByteString, [Fd]) #
Receive a ByteString
of the given size from the transport, plus
any Unix file descriptors that arrive with the byte data. 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 () #
Close an open transport, and release any associated resources or handles.
Instances
Transport SocketTransport # | |||||
Defined in DBus.Transport Associated Types
Methods transportDefaultOptions :: TransportOptions SocketTransport # transportPut :: SocketTransport -> ByteString -> IO () # transportPutWithFds :: SocketTransport -> ByteString -> [Fd] -> IO () # transportGet :: SocketTransport -> Int -> IO ByteString # transportGetWithFds :: SocketTransport -> Int -> IO (ByteString, [Fd]) # transportClose :: SocketTransport -> IO () # |
class Transport t => TransportOpen t where #
A Transport
which can open a connection to a remote peer.
Methods
transportOpen :: TransportOptions t -> Address -> IO t #
Open a connection to the given address, using the given options.
Throws a TransportError
if the connection could not be
established.
Instances
TransportOpen SocketTransport # | |
Defined in DBus.Transport Methods transportOpen :: TransportOptions SocketTransport -> Address -> IO SocketTransport # |
class Transport t => TransportListen t where #
A Transport
which can listen for and accept connections from remote
peers.
Methods
transportListen :: TransportOptions t -> Address -> IO (TransportListener t) #
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 #
Accept a new connection.
Throws a TransportError
if some error happens before the
transport is ready to exchange bytes.
transportListenerClose :: TransportListener t -> IO () #
Close an open listener.
transportListenerAddress :: TransportListener t -> Address #
Get the address to use to connect to a listener.
transportListenerUUID :: TransportListener t -> UUID #
Get the UUID allocated to this transport listener.
See randomUUID
.
Instances
TransportListen SocketTransport # | |||||
Defined in DBus.Transport Associated Types
Methods transportListen :: TransportOptions SocketTransport -> Address -> IO (TransportListener SocketTransport) # transportAccept :: TransportListener SocketTransport -> IO SocketTransport # transportListenerClose :: TransportListener SocketTransport -> IO () # transportListenerAddress :: TransportListener SocketTransport -> Address # transportListenerUUID :: TransportListener SocketTransport -> UUID # |
Transport errors
data TransportError #
Thrown from transport methods when an error occurs.
Instances
Exception TransportError # | |
Defined in DBus.Transport Methods toException :: TransportError -> SomeException # fromException :: SomeException -> Maybe TransportError # displayException :: TransportError -> String # backtraceDesired :: TransportError -> Bool # | |
Show TransportError # | |
Defined in DBus.Transport Methods showsPrec :: Int -> TransportError -> ShowS # show :: TransportError -> String # showList :: [TransportError] -> ShowS # | |
Eq TransportError # | |
Defined in DBus.Transport Methods (==) :: TransportError -> TransportError -> Bool # (/=) :: TransportError -> TransportError -> Bool # |
transportError :: String -> TransportError #
Socket transport
data SocketTransport #
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.
Instances
socketTransportCredentials :: SocketTransport -> IO (Maybe CUInt, Maybe CUInt, Maybe CUInt) #
Returns the processID, userID, and groupID of the socket's peer.
See getPeerCredential
.