Portability | portable |
---|---|
Stability | provisional |
Maintainer | libraries@haskell.org |
Network.Socket.Internal
Contents
Description
A module containing semi-public Network.Socket
internals.
Modules which extend the Network.Socket
module will need to use
this module while ideally most users will be able to make do with
the public interface.
- type HostAddress = Word32
- type HostAddress6 = (Word32, Word32, Word32, Word32)
- type FlowInfo = Word32
- type ScopeID = Word32
- newtype PortNumber = PortNum Word16
- data SockAddr
- peekSockAddr :: Ptr SockAddr -> IO SockAddr
- pokeSockAddr :: Ptr a -> SockAddr -> IO ()
- sizeOfSockAddr :: SockAddr -> Int
- sizeOfSockAddrByFamily :: Family -> Int
- withSockAddr :: SockAddr -> (Ptr SockAddr -> Int -> IO a) -> IO a
- withNewSockAddr :: Family -> (Ptr SockAddr -> Int -> IO a) -> IO a
- data Family
- throwSocketError :: String -> IO a
- throwSocketErrorIfMinus1_ :: Num a => String -> IO a -> IO ()
- throwSocketErrorIfMinus1Retry :: Num a => String -> IO a -> IO a
- throwSocketErrorIfMinus1RetryMayBlock :: Num a => String -> IO b -> IO a -> IO a
- withSocketsDo :: IO a -> IO a
Socket addresses
type HostAddress = Word32
type HostAddress6 = (Word32, Word32, Word32, Word32)
type FlowInfo = Word32
type ScopeID = Word32
newtype PortNumber
Constructors
PortNum Word16 |
Instances
Enum PortNumber | |
Eq PortNumber | |
Integral PortNumber | |
Num PortNumber | |
Ord PortNumber | |
Real PortNumber | |
Show PortNumber | |
Typeable PortNumber | |
Storable PortNumber |
data SockAddr
Constructors
SockAddrInet PortNumber HostAddress | |
SockAddrInet6 PortNumber FlowInfo HostAddress6 ScopeID | |
SockAddrUnix String |
peekSockAddr :: Ptr SockAddr -> IO SockAddr
Read a SockAddr
from the given memory location.
pokeSockAddr :: Ptr a -> SockAddr -> IO ()
Write the given SockAddr
to the given memory location.
sizeOfSockAddr :: SockAddr -> Int
Computes the storage requirements (in bytes) of the given
SockAddr
. This function differs from sizeOf
in that the value of the argument is used.
sizeOfSockAddrByFamily :: Family -> Int
withSockAddr :: SockAddr -> (Ptr SockAddr -> Int -> IO a) -> IO a
withNewSockAddr :: Family -> (Ptr SockAddr -> Int -> IO a) -> IO a
Protocol families
data Family
This data type might have different constructors depending on what is supported by the operating system.
Socket error functions
Arguments
:: String | textual description of the error location |
-> IO a |
Throw an IOError
corresponding to the current socket error.
Guards for socket operations that may fail
Arguments
:: Num a | |
=> String | textual description of the location |
-> IO a | the |
-> IO () |
Throw an IOError
corresponding to the current socket error if
the IO action returns a result of -1
. Discards the result of the
IO action after error handling.
Arguments
:: Num a | |
=> String | textual description of the location |
-> IO a | the |
-> IO a |
Throw an IOError
corresponding to the current socket error if
the IO action returns a result of -1
, but retries in case of an
interrupted operation.
throwSocketErrorIfMinus1RetryMayBlock
Arguments
:: Num a | |
=> String | textual description of the location |
-> IO b | action to execute before retrying if an immediate retry would block |
-> IO a | the |
-> IO a |
Throw an IOError
corresponding to the current socket error if
the IO action returns a result of -1
, but retries in case of an
interrupted operation. Checks for operations that would block and
executes an alternative action before retrying in that case.
Initialization
withSocketsDo :: IO a -> IO a
On Windows operating systems, the networking subsystem has to be
initialised using withSocketsDo
before any networking operations can
be used. eg.
main = withSocketsDo $ do {...}
Although this is only strictly necessary on Windows platforms, it is harmless on other platforms, so for portability it is good practice to use it all the time.