streaming-commons-0.2.1.2: Common lower-level functions needed by various streaming data libraries
Safe HaskellNone
LanguageHaskell98

Data.Streaming.Network

Synopsis

Types

data ServerSettings #

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

Instances

Instances details
HasReadBufferSize ServerSettings #

Since 0.1.13

Instance details

Defined in Data.Streaming.Network

Methods

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

HasPort ServerSettings # 
Instance details

Defined in Data.Streaming.Network

Methods

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

data ClientSettings #

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

Instances

Instances details
HasReadBufferSize ClientSettings #

Since 0.1.13

Instance details

Defined in Data.Streaming.Network

Methods

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

HasPort ClientSettings # 
Instance details

Defined in Data.Streaming.Network

Methods

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

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".

Instances

Instances details
Eq HostPreference # 
Instance details

Defined in Data.Streaming.Network.Internal

Ord HostPreference # 
Instance details

Defined in Data.Streaming.Network.Internal

Read HostPreference # 
Instance details

Defined in Data.Streaming.Network.Internal

Methods

readsPrec :: Int -> ReadS HostPreference

readList :: ReadS [HostPreference]

readPrec :: ReadPrec HostPreference

readListPrec :: ReadPrec [HostPreference]

Show HostPreference # 
Instance details

Defined in Data.Streaming.Network.Internal

Methods

showsPrec :: Int -> HostPreference -> ShowS

show :: HostPreference -> String

showList :: [HostPreference] -> ShowS

IsString HostPreference # 
Instance details

Defined in Data.Streaming.Network.Internal

Methods

fromString :: String -> HostPreference

data Message #

Representation of a single UDP message

Constructors

Message 

Fields

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 #

data ServerSettingsUnix #

Settings for a Unix domain sockets server.

Instances

Instances details
HasReadBufferSize ServerSettingsUnix #

Since 0.1.13

Instance details

Defined in Data.Streaming.Network

Methods

readBufferSizeLens :: Functor f => (Int -> f Int) -> ServerSettingsUnix -> f ServerSettingsUnix #

HasAfterBind ServerSettingsUnix # 
Instance details

Defined in Data.Streaming.Network

Methods

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

HasPath ServerSettingsUnix # 
Instance details

Defined in Data.Streaming.Network

Methods

pathLens :: Functor f => (FilePath -> f FilePath) -> ServerSettingsUnix -> f ServerSettingsUnix #

data ClientSettingsUnix #

Settings for a Unix domain sockets client.

Instances

Instances details
HasReadBufferSize ClientSettingsUnix #

Since 0.1.14

Instance details

Defined in Data.Streaming.Network

Methods

readBufferSizeLens :: Functor f => (Int -> f Int) -> ClientSettingsUnix -> f ClientSettingsUnix #

HasPath ClientSettingsUnix # 
Instance details

Defined in Data.Streaming.Network

Methods

pathLens :: Functor f => (FilePath -> f FilePath) -> ClientSettingsUnix -> f ClientSettingsUnix #

data AppDataUnix #

The data passed to a Unix domain sockets Application.

Instances

Instances details
HasReadWrite AppDataUnix # 
Instance details

Defined in Data.Streaming.Network

Methods

readLens :: Functor f => (IO ByteString -> f (IO ByteString)) -> AppDataUnix -> f AppDataUnix #

writeLens :: Functor f => ((ByteString -> IO ()) -> f (ByteString -> IO ())) -> AppDataUnix -> f AppDataUnix #

Smart constructors

serverSettingsTCP #

Arguments

:: Int

port to bind to

-> HostPreference

host binding preferences

-> ServerSettings 

Smart constructor.

serverSettingsTCPSocket :: Socket -> ServerSettings #

Create a server settings that uses an already available listening socket. Any port and host modifications made to this value will be ignored.

Since 0.1.1

clientSettingsTCP #

Arguments

:: Int

port to connect to

-> ByteString

host to connect to

-> ClientSettings 

Smart constructor.

serverSettingsUDP #

Arguments

:: Int

port to bind to

-> HostPreference

host binding preferences

-> ServerSettings 

Smart constructor.

clientSettingsUDP #

Arguments

:: Int

port to connect to

-> ByteString

host to connect to

-> ClientSettings 

Smart constructor.

serverSettingsUnix #

Arguments

:: FilePath

path to bind to

-> ServerSettingsUnix 

Smart constructor.

clientSettingsUnix #

Arguments

:: FilePath

path to connect to

-> ClientSettingsUnix 

Smart constructor.

message :: ByteString -> SockAddr -> Message #

Classes

class HasPort a where #

Methods

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

Instances

Instances details
HasPort ClientSettings # 
Instance details

Defined in Data.Streaming.Network

Methods

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

HasPort ServerSettings # 
Instance details

Defined in Data.Streaming.Network

Methods

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

class HasAfterBind a where #

Methods

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

Instances

Instances details
HasAfterBind ServerSettingsUnix # 
Instance details

Defined in Data.Streaming.Network

Methods

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

HasAfterBind ServerSettings # 
Instance details

Defined in Data.Streaming.Network

Methods

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

class HasReadWrite a where #

Methods

readLens :: Functor f => (IO ByteString -> f (IO ByteString)) -> a -> f a #

writeLens :: Functor f => ((ByteString -> IO ()) -> f (ByteString -> IO ())) -> a -> f a #

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 #

HasReadWrite AppDataUnix # 
Instance details

Defined in Data.Streaming.Network

Methods

readLens :: Functor f => (IO ByteString -> f (IO ByteString)) -> AppDataUnix -> f AppDataUnix #

writeLens :: Functor f => ((ByteString -> IO ()) -> f (ByteString -> IO ())) -> AppDataUnix -> f AppDataUnix #

class HasReadBufferSize a where #

Since 0.1.13

Methods

readBufferSizeLens :: Functor f => (Int -> f Int) -> a -> f a #

Instances

Instances details
HasReadBufferSize ClientSettingsUnix #

Since 0.1.14

Instance details

Defined in Data.Streaming.Network

Methods

readBufferSizeLens :: Functor f => (Int -> f Int) -> ClientSettingsUnix -> f ClientSettingsUnix #

HasReadBufferSize ServerSettingsUnix #

Since 0.1.13

Instance details

Defined in Data.Streaming.Network

Methods

readBufferSizeLens :: Functor f => (Int -> f Int) -> ServerSettingsUnix -> f ServerSettingsUnix #

HasReadBufferSize ClientSettings #

Since 0.1.13

Instance details

Defined in Data.Streaming.Network

Methods

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

HasReadBufferSize ServerSettings #

Since 0.1.13

Instance details

Defined in Data.Streaming.Network

Methods

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

class HasPath a where #

Methods

pathLens :: Functor f => (FilePath -> f FilePath) -> a -> f a #

Instances

Instances details
HasPath ClientSettingsUnix # 
Instance details

Defined in Data.Streaming.Network

Methods

pathLens :: Functor f => (FilePath -> f FilePath) -> ClientSettingsUnix -> f ClientSettingsUnix #

HasPath ServerSettingsUnix # 
Instance details

Defined in Data.Streaming.Network

Methods

pathLens :: Functor f => (FilePath -> f FilePath) -> ServerSettingsUnix -> f ServerSettingsUnix #

Setters

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

setAddrFamily :: Family -> ClientSettings -> ClientSettings #

Set the address family for the given settings.

Since 0.1.3

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

setReadBufferSize :: HasReadBufferSize a => Int -> a -> a #

Set buffer size used when reading from socket.

Since 0.1.13

setPath :: HasPath a => FilePath -> a -> a #

Getters

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

getHost :: ClientSettings -> ByteString #

getAddrFamily :: ClientSettings -> Family #

Get the address family for the given settings.

Since 0.1.3

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

getReadBufferSize :: HasReadBufferSize a => a -> Int #

Get buffer size used when reading from socket.

Since 0.1.13

getPath :: HasPath a => a -> FilePath #

appRead :: HasReadWrite a => a -> IO ByteString #

appWrite :: HasReadWrite a => a -> ByteString -> IO () #

appSockAddr :: AppData -> SockAddr #

appLocalAddr :: AppData -> Maybe SockAddr #

appCloseConnection :: AppData -> IO () #

Close the underlying connection. One possible use case is simulating connection failures in a test suite.

Since 0.1.6

appRawSocket :: AppData -> Maybe Socket #

Get the raw socket for this AppData, if available.

Since 0.1.12

Functions

General

bindPortGen :: SocketType -> Int -> HostPreference -> IO Socket #

Attempt to bind a listening Socket on the given host/port using given SocketType. If no host is given, will use the first address available.

bindPortGenEx :: [(SocketOption, Int)] -> SocketType -> Int -> HostPreference -> IO Socket #

Attempt to bind a listening Socket on the given host/port using given socket options and SocketType. If no host is given, will use the first address available.

Since 0.1.17

bindRandomPortGen :: SocketType -> HostPreference -> IO (Int, Socket) #

Bind to a random port number. Especially useful for writing network tests.

Since 0.1.1

getSocketGen :: SocketType -> String -> Int -> IO (Socket, AddrInfo) #

Attempt to connect to the given host/port using given SocketType.

getSocketFamilyGen :: SocketType -> String -> Int -> Family -> IO (Socket, AddrInfo) #

Attempt to connect to the given hostportaddress family using given SocketType.

Since 0.1.3

acceptSafe :: Socket -> IO (Socket, SockAddr) #

Try to accept a connection, recovering automatically from exceptions.

As reported by Kazu against Warp, "resource exhausted (Too many open files)" may be thrown by accept(). This function will catch that exception, wait a second, and then try again.

unassignedPorts :: UArray Int Int #

getUnassignedPort :: IO Int #

Get a port from the IANA list of unassigned ports.

Internally, this function uses an IORef to cycle through the list of ports

TCP

bindPortTCP :: Int -> HostPreference -> IO Socket #

Attempt to bind a listening Socket on the given host/port. If no host is given, will use the first address available. maxListenQueue is topically 128 which is too short for high performance servers. So, we specify 'max 2048 maxListenQueue' to the listen queue.

bindRandomPortTCP :: HostPreference -> IO (Int, Socket) #

Bind a random TCP port.

See bindRandomPortGen.

Since 0.1.1

getSocketTCP :: ByteString -> Int -> IO (Socket, SockAddr) #

Attempt to connect to the given host/port.

getSocketFamilyTCP :: ByteString -> Int -> Family -> IO (Socket, SockAddr) #

Attempt to connect to the given hostportaddress family.

Since 0.1.3

safeRecv :: Socket -> Int -> IO ByteString #

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.

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

Run an Application by connecting to the specified server.

type ConnectionHandle = Socket -> SockAddr -> Maybe SockAddr -> IO () #

UDP

bindPortUDP :: Int -> HostPreference -> IO Socket #

Attempt to bind a listening Socket on the given host/port. If no host is given, will use the first address available.

bindRandomPortUDP :: HostPreference -> IO (Int, Socket) #

Bind a random UDP port.

See bindRandomPortGen

Since 0.1.1

getSocketUDP :: String -> Int -> IO (Socket, AddrInfo) #

Attempt to connect to the given host/port.

Unix

bindPath :: FilePath -> IO Socket #

Attempt to bind a listening Unix domain socket at the given path.

getSocketUnix :: FilePath -> IO Socket #

Attempt to connect to the given Unix domain socket path.

runUnixServer :: ServerSettingsUnix -> (AppDataUnix -> 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.

runUnixClient :: ClientSettingsUnix -> (AppDataUnix -> IO a) -> IO a #

Run an Application by connecting to the specified server.