conduit-extra-1.1.17: Batteries included conduit: adapters for common libraries.

Safe HaskellNone
LanguageHaskell98

Data.Conduit.Network

Contents

Synopsis

Basic utilities

sourceSocket :: MonadIO m => Socket -> Producer m ByteString Source #

Stream data from the socket.

This function does not automatically close the socket.

Since 0.0.0

sinkSocket :: MonadIO m => Socket -> Consumer ByteString m () Source #

Stream data to the socket.

This function does not automatically close the socket.

Since 0.0.0

Simple TCP server/client interface.

data AppData :: * #

Instances

HasReadWrite AppData 

Methods

readLens :: Functor f => (IO ByteString -> f (IO ByteString)) -> AppData -> f AppData

writeLens :: Functor f => ((ByteString -> IO ()) -> f (ByteString -> IO ())) -> AppData -> f AppData

appSource :: (HasReadWrite ad, MonadIO m) => ad -> Producer m ByteString Source #

appSink :: (HasReadWrite ad, MonadIO m) => ad -> Consumer ByteString m () Source #

Server

data ServerSettings :: * #

Instances

HasReadBufferSize ServerSettings 
HasPort ServerSettings 

Methods

portLens :: Functor f => (Int -> f Int) -> ServerSettings -> f ServerSettings

HasAfterBind ServerSettings 

Methods

afterBindLens :: Functor f => ((Socket -> IO ()) -> f (Socket -> IO ())) -> ServerSettings -> f ServerSettings

runTCPServerWithHandle :: ServerSettings -> ConnectionHandle -> IO a #

forkTCPServer :: MonadBaseControl IO 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 :: MonadBaseControl IO m => ServerSettings -> (AppData -> m ()) -> m a Source #

Run a general TCP server

Same as runTCPServer, except monad can be any instance of MonadBaseControl IO.

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 :: * #

Instances

HasReadBufferSize ClientSettings 
HasPort ClientSettings 

Methods

portLens :: Functor f => (Int -> f Int) -> ClientSettings -> f ClientSettings

runGeneralTCPClient :: MonadBaseControl IO m => ClientSettings -> (AppData -> m a) -> m a Source #

Run a general TCP client

Same as runTCPClient, except monad can be any instance of MonadBaseControl IO.

Since 1.1.3

Getters

getPort :: HasPort a => a -> Int #

getAfterBind :: HasAfterBind a => a -> Socket -> IO () #

Setters

setPort :: HasPort a => Int -> a -> a #

setAfterBind :: HasAfterBind a => (Socket -> IO ()) -> a -> a #

Types