streaming-commons-0.1.7.3: Common lower-level functions needed by various streaming data libraries

Safe HaskellNone
LanguageHaskell98

Data.Streaming.Network

Contents

Synopsis

Types

data ServerSettings Source

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

data ClientSettings Source

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

data HostPreference Source

Which host to bind.

Note: The IsString instance recognizes the following special values:

  • * means HostAny
  • *4 means HostIPv4
  • !4 means HostIPv4Only
  • *6 means HostIPv6
  • !6 means HostIPv6Only

Any other values is treated as a hostname. As an example, to bind to the IPv4 local host only, use "127.0.0.1".

data Message Source

Representation of a single UDP message

Constructors

Message 

Fields

msgData :: !ByteString
 
msgSender :: !SockAddr
 

data AppData Source

The data passed to an Application.

data ServerSettingsUnix Source

Settings for a Unix domain sockets server.

data ClientSettingsUnix Source

Settings for a Unix domain sockets client.

data AppDataUnix Source

The data passed to a Unix domain sockets Application.

Smart constructors

serverSettingsTCP Source

Arguments

:: Int

port to bind to

-> HostPreference

host binding preferences

-> ServerSettings 

Smart constructor.

serverSettingsTCPSocket :: Socket -> ServerSettings Source

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 Source

Arguments

:: Int

port to connect to

-> ByteString

host to connect to

-> ClientSettings 

Smart constructor.

serverSettingsUDP Source

Arguments

:: Int

port to bind to

-> HostPreference

host binding preferences

-> ServerSettings 

Smart constructor.

clientSettingsUDP Source

Arguments

:: Int

port to connect to

-> ByteString

host to connect to

-> ClientSettings 

Smart constructor.

serverSettingsUnix Source

Arguments

:: FilePath

path to bind to

-> ServerSettingsUnix 

Smart constructor.

clientSettingsUnix Source

Arguments

:: FilePath

path to connect to

-> ClientSettingsUnix 

Smart constructor.

message :: ByteString -> SockAddr -> Message Source

Classes

class HasPort a where Source

Methods

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

class HasAfterBind a where Source

Methods

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

class HasReadWrite a where Source

Methods

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

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

class HasPath a where Source

Methods

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

Setters

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

setAddrFamily :: Family -> ClientSettings -> ClientSettings Source

Set the address family for the given settings.

Since 0.1.3

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

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

Getters

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

getHost :: ClientSettings -> ByteString Source

getAddrFamily :: ClientSettings -> Family Source

Get the address family for the given settings.

Since 0.1.3

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

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

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

appSockAddr :: AppData -> SockAddr Source

appCloseConnection :: AppData -> IO () Source

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

Since 0.1.6

Functions

General

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

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.

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

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

This will attempt 30 different port numbers before giving up and throwing an exception.

Since 0.1.1

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

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

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

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

Since 0.1.3

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

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.

getUnassignedPort :: IO Int Source

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 Source

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) Source

Bind a random TCP port.

See bindRandomPortGen.

Since 0.1.1

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

Attempt to connect to the given host/port.

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

Attempt to connect to the given hostportaddress family.

Since 0.1.3

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

runTCPServer :: ServerSettings -> (AppData -> IO ()) -> IO () 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.

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

Run an Application by connecting to the specified server.

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

UDP

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

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) Source

Bind a random UDP port.

See bindRandomPortGen

Since 0.1.1

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

Attempt to connect to the given host/port.

Unix

bindPath :: FilePath -> IO Socket Source

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

getSocketUnix :: FilePath -> IO Socket Source

Attempt to connect to the given Unix domain socket path.

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

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

Run an Application by connecting to the specified server.