{-# LINE 1 "src/System/Socket/Internal/MsgFlags.hsc" #-}
module System.Socket.Internal.MsgFlags (
{-# LINE 2 "src/System/Socket/Internal/MsgFlags.hsc" #-}
    MsgFlags (..)
  , msgEOR
  , msgNOSIGNAL
  , msgOOB
  , msgWAITALL
  ) where

import Data.Bits
import Data.Monoid

import Foreign.C.Types


{-# LINE 15 "src/System/Socket/Internal/MsgFlags.hsc" #-}

-- | Use the `Data.Monoid.Monoid` instance to combine several flags:
--
--   > mconcat [msgNOSIGNAL, msgWAITALL]
newtype MsgFlags
      = MsgFlags CInt
      deriving (Eq, Show)

instance Monoid MsgFlags where
  mempty
    = MsgFlags 0
  mappend (MsgFlags a) (MsgFlags b)
    = MsgFlags (a .|. b)

msgEOR      :: MsgFlags
msgEOR       = MsgFlags (128)
{-# LINE 31 "src/System/Socket/Internal/MsgFlags.hsc" #-}

msgNOSIGNAL :: MsgFlags
msgNOSIGNAL  = MsgFlags (16384)
{-# LINE 34 "src/System/Socket/Internal/MsgFlags.hsc" #-}

msgOOB      :: MsgFlags
msgOOB       = MsgFlags (1)
{-# LINE 37 "src/System/Socket/Internal/MsgFlags.hsc" #-}

msgWAITALL  :: MsgFlags
msgWAITALL   = MsgFlags (256)
{-# LINE 40 "src/System/Socket/Internal/MsgFlags.hsc" #-}