HTTP-4000.0.6: A library for client-side HTTPSource codeContentsIndex
Network.TCP
Portabilitynon-portable (not tested)
Stabilityexperimental
MaintainerSigbjorn Finne <sigbjorn.finne@gmail.com>
Description
Some utility functions for working with the Haskell network package. Mostly for internal use by the Network.HTTP code, but
Synopsis
data Connection
openTCPPort :: String -> Int -> IO Connection
isConnectedTo :: Connection -> String -> IO Bool
openTCPConnection :: BufferType ty => String -> Int -> IO (HandleStream ty)
isTCPConnectedTo :: HandleStream ty -> String -> IO Bool
data HandleStream a
class BufferType bufType => HStream bufType where
openStream :: String -> Int -> IO (HandleStream bufType)
readLine :: HandleStream bufType -> IO (Result bufType)
readBlock :: HandleStream bufType -> Int -> IO (Result bufType)
writeBlock :: HandleStream bufType -> bufType -> IO (Result ())
close :: HandleStream bufType -> IO ()
data StreamHooks ty = StreamHooks {
hook_readLine :: (ty -> String) -> Result ty -> IO ()
hook_readBlock :: (ty -> String) -> Int -> Result ty -> IO ()
hook_writeBlock :: (ty -> String) -> ty -> Result () -> IO ()
hook_close :: IO ()
}
nullHooks :: StreamHooks ty
setStreamHooks :: HandleStream ty -> StreamHooks ty -> IO ()
hstreamToConnection :: HandleStream String -> Connection
Documentation
data Connection Source
The Connection newtype is a wrapper that allows us to make connections an instance of the Stream class, without GHC extensions. While this looks sort of like a generic reference to the transport layer it is actually TCP specific, which can be seen in the implementation of the 'Stream Connection' instance.
openTCPPort :: String -> Int -> IO ConnectionSource
openTCPPort uri port establishes a connection to a remote host, using getHostByName which possibly queries the DNS system, hence may trigger a network connection.
isConnectedTo :: Connection -> String -> IO BoolSource
Checks both that the underlying Socket is connected and that the connection peer matches the given host name (which is recorded locally).
openTCPConnection :: BufferType ty => String -> Int -> IO (HandleStream ty)Source
isTCPConnectedTo :: HandleStream ty -> String -> IO BoolSource
data HandleStream a Source
class BufferType bufType => HStream bufType whereSource

HStream overloads the use of HandleStreams, letting you overload the handle operations over the type that is communicated across the handle. It is used in the context of Network.HTTP to buy us freedom in how HTTP Request and Response payloads are represented.

The package provides instances for ByteStrings and String, but should you want to plug in your own payload representation, defining your own HStream instance is all it takes.

Methods
openStream :: String -> Int -> IO (HandleStream bufType)Source
readLine :: HandleStream bufType -> IO (Result bufType)Source
readBlock :: HandleStream bufType -> Int -> IO (Result bufType)Source
writeBlock :: HandleStream bufType -> bufType -> IO (Result ())Source
close :: HandleStream bufType -> IO ()Source
data StreamHooks ty Source
Constructors
StreamHooks
hook_readLine :: (ty -> String) -> Result ty -> IO ()
hook_readBlock :: (ty -> String) -> Int -> Result ty -> IO ()
hook_writeBlock :: (ty -> String) -> ty -> Result () -> IO ()
hook_close :: IO ()
nullHooks :: StreamHooks tySource
setStreamHooks :: HandleStream ty -> StreamHooks ty -> IO ()Source
hstreamToConnection :: HandleStream String -> ConnectionSource
Produced by Haddock version 2.6.0