Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- sourceSocket :: MonadIO m => Socket -> ConduitT i ByteString m ()
- sinkSocket :: MonadIO m => Socket -> ConduitT ByteString o m ()
- data AppData
- appSource :: ( HasReadWrite ad, MonadIO m) => ad -> ConduitT i ByteString m ()
- appSink :: ( HasReadWrite ad, MonadIO m) => ad -> ConduitT ByteString o m ()
- appSockAddr :: AppData -> SockAddr
- appLocalAddr :: AppData -> Maybe SockAddr
- data ServerSettings
- serverSettings :: Int -> HostPreference -> ServerSettings
- runTCPServer :: ServerSettings -> ( AppData -> IO ()) -> IO a
- runTCPServerWithHandle :: ServerSettings -> ConnectionHandle -> IO a
- forkTCPServer :: MonadUnliftIO m => ServerSettings -> ( AppData -> m ()) -> m ThreadId
- runGeneralTCPServer :: MonadUnliftIO m => ServerSettings -> ( AppData -> m ()) -> m a
- data ClientSettings
- clientSettings :: Int -> ByteString -> ClientSettings
- runTCPClient :: ClientSettings -> ( AppData -> IO a) -> IO a
- runGeneralTCPClient :: MonadUnliftIO m => ClientSettings -> ( AppData -> m a) -> m a
- getPort :: HasPort a => a -> Int
- getHost :: ClientSettings -> ByteString
- getAfterBind :: HasAfterBind a => a -> Socket -> IO ()
- getNeedLocalAddr :: ServerSettings -> Bool
- setPort :: HasPort a => Int -> a -> a
- setHost :: ByteString -> ClientSettings -> ClientSettings
- setAfterBind :: HasAfterBind a => ( Socket -> IO ()) -> a -> a
- setNeedLocalAddr :: Bool -> ServerSettings -> ServerSettings
- data HostPreference
Basic utilities
sourceSocket :: MonadIO m => Socket -> ConduitT i ByteString m () Source #
Stream data from the socket.
This function does not automatically close the socket.
Since 0.0.0
sinkSocket :: MonadIO m => Socket -> ConduitT ByteString o m () Source #
Stream data to the socket.
This function does not automatically close the socket.
Since 0.0.0
Simple TCP server/client interface.
The data passed to an
Application
.
Instances
HasReadWrite AppData | |
Defined in Data.Streaming.Network readLens :: Functor f => ( IO ByteString -> f ( IO ByteString )) -> AppData -> f AppData Source # writeLens :: Functor f => (( ByteString -> IO ()) -> f ( ByteString -> IO ())) -> AppData -> f AppData Source # |
appSource :: ( HasReadWrite ad, MonadIO m) => ad -> ConduitT i ByteString m () Source #
appSink :: ( HasReadWrite ad, MonadIO m) => ad -> ConduitT ByteString o m () Source #
appSockAddr :: AppData -> SockAddr Source #
Server
data ServerSettings Source #
Settings for a TCP server. It takes a port to listen on, and an optional hostname to bind to.
Instances
HasPort ServerSettings | |
Defined in Data.Streaming.Network portLens :: Functor f => ( Int -> f Int ) -> ServerSettings -> f ServerSettings Source # |
|
HasAfterBind ServerSettings | |
Defined in Data.Streaming.Network afterBindLens :: Functor f => (( Socket -> IO ()) -> f ( Socket -> IO ())) -> ServerSettings -> f ServerSettings Source # |
|
HasReadBufferSize ServerSettings |
Since 0.1.13 |
Defined in Data.Streaming.Network readBufferSizeLens :: Functor f => ( Int -> f Int ) -> ServerSettings -> f ServerSettings Source # |
serverSettings :: Int -> HostPreference -> ServerSettings Source #
runTCPServer :: ServerSettings -> ( AppData -> IO ()) -> IO a Source #
Run an
Application
with the given settings. This function will create a
new listening socket, accept connections on it, and spawn a new thread for
each connection.
runTCPServerWithHandle :: ServerSettings -> ConnectionHandle -> IO a Source #
forkTCPServer :: MonadUnliftIO m => ServerSettings -> ( AppData -> m ()) -> m ThreadId Source #
Fork a TCP Server
Will fork the runGeneralTCPServer function but will only return from this call when the server is bound to the port and accepting incoming connections. Will return the thread id of the server
Since 1.1.4
runGeneralTCPServer :: MonadUnliftIO m => ServerSettings -> ( AppData -> m ()) -> m a Source #
Run a general TCP server
Same as
runTCPServer
, except monad can be any instance of
MonadUnliftIO
.
Note that any changes to the monadic state performed by individual client handlers will be discarded. If you have mutable state you want to share among multiple handlers, you need to use some kind of mutable variables.
Since 1.1.3
Client
data ClientSettings Source #
Settings for a TCP client, specifying how to connect to the server.
Instances
HasPort ClientSettings | |
Defined in Data.Streaming.Network portLens :: Functor f => ( Int -> f Int ) -> ClientSettings -> f ClientSettings Source # |
|
HasReadBufferSize ClientSettings |
Since 0.1.13 |
Defined in Data.Streaming.Network readBufferSizeLens :: Functor f => ( Int -> f Int ) -> ClientSettings -> f ClientSettings Source # |
clientSettings :: Int -> ByteString -> ClientSettings Source #
runTCPClient :: ClientSettings -> ( AppData -> IO a) -> IO a Source #
Run an
Application
by connecting to the specified server.
runGeneralTCPClient :: MonadUnliftIO m => ClientSettings -> ( AppData -> m a) -> m a Source #
Run a general TCP client
Same as
runTCPClient
, except monad can be any instance of
MonadUnliftIO
.
Since 1.1.3
Getters
getHost :: ClientSettings -> ByteString Source #
getAfterBind :: HasAfterBind a => a -> Socket -> IO () Source #
Setters
setHost :: ByteString -> ClientSettings -> ClientSettings Source #
setAfterBind :: HasAfterBind a => ( Socket -> IO ()) -> a -> a Source #
setNeedLocalAddr :: Bool -> ServerSettings -> ServerSettings Source #
Types
data HostPreference Source #
Which host to bind.
Note: The
IsString
instance recognizes the following special values:
-
*
meansHostAny
- "any IPv4 or IPv6 hostname" -
*4
meansHostIPv4
- "any IPv4 or IPv6 hostname, IPv4 preferred" -
!4
meansHostIPv4Only
- "any IPv4 hostname" -
*6
meansHostIPv6
@ - "any IPv4 or IPv6 hostname, IPv6 preferred" -
!6
meansHostIPv6Only
- "any IPv6 hostname"
Note that the permissive
*
values allow binding to an IPv4 or an
IPv6 hostname, which means you might be able to successfully bind
to a port more times than you expect (eg once on the IPv4 localhost
127.0.0.1 and again on the IPv6 localhost 0:0:0:0:0:0:0:1).
Any other value is treated as a hostname. As an example, to bind to the IPv4 local host only, use "127.0.0.1".