sockets-0.1.0.0: src/Socket.hs
{-# language BangPatterns #-}
{-# language DeriveAnyClass #-}
{-# language DerivingStrategies #-}
{-# language DuplicateRecordFields #-}
module Socket
( SocketException(..)
, Context(..)
, Reason(..)
) where
import Control.Exception (Exception)
import Foreign.C.Types (CInt)
-- | Represents any unexpected behaviors that a function working on a
-- socket, connection, or listener can exhibit.
data SocketException = SocketException
{ context :: Context
, reason :: Reason
}
deriving stock (Eq,Show)
deriving anyclass (Exception)
-- | The function that behaved unexpectedly.
data Context
= Accept
| Bind
| Close
| Connect
| GetName
| Listen
| Open
| Option
| Receive
| Send
| Shutdown
deriving stock (Eq,Show)
-- | A description of the unexpected behavior.
data Reason
= MessageTruncated !Int !Int
-- ^ The datagram did not fit in the buffer. This can happen while
-- sending or receiving. Fields: buffer size, datagram size.
| SocketAddressSize
-- ^ The socket address was not the expected size. This exception
-- indicates a bug in this library or (less likely) in the
-- operating system.
| SocketAddressFamily
-- ^ The socket address had an unexpected family. This exception
-- indicates a bug in this library or (less likely) in the
-- operating system.
| OptionValueSize
-- ^ The option value was not the expected size. This exception
-- indicates a bug in this library or (less likely) in the
-- operating system.
| NegativeBytesRequested
-- ^ The user requested a negative number of bytes in a call
-- to a receive function.
| RemoteNotShutdown
-- ^ The remote end sent more data when it was expected to send
-- a shutdown.
| RemoteShutdown
-- ^ The remote end has shutdown its side of the full-duplex
-- connection. This can happen @receive@ is called on a
-- stream socket. This is not necessarily a bad thing. Many
-- protocols use shutdown to indicate that no more data
-- is available. These protocols can be contrasted with
-- protocols that send a length representing a number of
-- expected bytes.
| ErrorCode !CInt
-- ^ Any error code from the operating system that this library does
-- not expect or recognize. Consult your operating system manual
-- for details about the error code.
deriving stock (Eq,Show)