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