conduit-extra-1.3.5: Batteries included conduit: adapters for common libraries.
Safe HaskellNone
LanguageHaskell98

Data.Conduit.Network

Synopsis

Basic utilities

sourceSocket :: MonadIO m => Socket -> ConduitT i ByteString m () #

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 () #

Stream data to the socket.

This function does not automatically close the socket.

Since 0.0.0

Simple TCP server/client interface.

data AppData #

The data passed to an Application.

Instances

Instances details
HasReadWrite AppData 
Instance details

Defined in Data.Streaming.Network

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 -> ConduitT i ByteString m () #

appSink :: (HasReadWrite ad, MonadIO m) => ad -> ConduitT ByteString o m () #

Server

data ServerSettings #

Settings for a TCP server. It takes a port to listen on, and an optional hostname to bind to.

Instances

Instances details
HasPort ServerSettings 
Instance details

Defined in Data.Streaming.Network

Methods

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

HasAfterBind ServerSettings 
Instance details

Defined in Data.Streaming.Network

Methods

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

HasReadBufferSize ServerSettings

Since 0.1.13

Instance details

Defined in Data.Streaming.Network

runTCPServer :: ServerSettings -> (AppData -> IO ()) -> IO a #

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.

forkTCPServer :: MonadUnliftIO m => ServerSettings -> (AppData -> m ()) -> m ThreadId #

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 #

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 #

Settings for a TCP client, specifying how to connect to the server.

Instances

Instances details
HasPort ClientSettings 
Instance details

Defined in Data.Streaming.Network

Methods

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

HasReadBufferSize ClientSettings

Since 0.1.13

Instance details

Defined in Data.Streaming.Network

runTCPClient :: ClientSettings -> (AppData -> IO a) -> IO a #

Run an Application by connecting to the specified server.

runGeneralTCPClient :: MonadUnliftIO m => ClientSettings -> (AppData -> m a) -> m a #

Run a general TCP client

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

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

data HostPreference #

Which host to bind.

Note: The IsString instance recognizes the following special values:

  • * means HostAny - "any IPv4 or IPv6 hostname"
  • *4 means HostIPv4 - "any IPv4 or IPv6 hostname, IPv4 preferred"
  • !4 means HostIPv4Only - "any IPv4 hostname"
  • *6 means HostIPv6@ - "any IPv4 or IPv6 hostname, IPv6 preferred"
  • !6 means HostIPv6Only - "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".