1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
{-# LANGUAGE CPP #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE PatternSynonyms #-}
#include "HsNet.h"
module Network.Socket.Flag where
import qualified Data.Semigroup as Sem
import Network.Socket.Imports
{-
import Network.Socket.ReadShow
import qualified Text.Read as P
-}
-- | Message flags. To combine flags, use '(<>)'.
newtype MsgFlag = MsgFlag { fromMsgFlag :: CInt }
deriving (Show, Eq, Ord, Num, Bits)
instance Sem.Semigroup MsgFlag where
(<>) = (.|.)
instance Monoid MsgFlag where
mempty = MsgFlag 0
#if !(MIN_VERSION_base(4,11,0))
mappend = (Sem.<>)
#endif
-- | Send or receive OOB(out-of-bound) data.
pattern MSG_OOB :: MsgFlag
#ifdef MSG_OOB
pattern MSG_OOB = MsgFlag (#const MSG_OOB)
#else
pattern MSG_OOB = MsgFlag 0
#endif
-- | Bypass routing table lookup.
pattern MSG_DONTROUTE :: MsgFlag
#ifdef MSG_DONTROUTE
pattern MSG_DONTROUTE = MsgFlag (#const MSG_DONTROUTE)
#else
pattern MSG_DONTROUTE = MsgFlag 0
#endif
-- | Peek at incoming message without removing it from the queue.
pattern MSG_PEEK :: MsgFlag
#ifdef MSG_PEEK
pattern MSG_PEEK = MsgFlag (#const MSG_PEEK)
#else
pattern MSG_PEEK = MsgFlag 0
#endif
-- | End of record.
pattern MSG_EOR :: MsgFlag
#ifdef MSG_EOR
pattern MSG_EOR = MsgFlag (#const MSG_EOR)
#else
pattern MSG_EOR = MsgFlag 0
#endif
-- | Received data is truncated. More data exist.
pattern MSG_TRUNC :: MsgFlag
#ifdef MSG_TRUNC
pattern MSG_TRUNC = MsgFlag (#const MSG_TRUNC)
#else
pattern MSG_TRUNC = MsgFlag 0
#endif
-- | Received control message is truncated. More control message exist.
pattern MSG_CTRUNC :: MsgFlag
#ifdef MSG_CTRUNC
pattern MSG_CTRUNC = MsgFlag (#const MSG_CTRUNC)
#else
pattern MSG_CTRUNC = MsgFlag 0
#endif
-- | Wait until the requested number of bytes have been read.
pattern MSG_WAITALL :: MsgFlag
#ifdef MSG_WAITALL
pattern MSG_WAITALL = MsgFlag (#const MSG_WAITALL)
#else
pattern MSG_WAITALL = MsgFlag 0
#endif
{-
msgFlagPairs :: [Pair MsgFlag String]
msgFlagPairs =
[ (MSG_OOB, "MSG_OOB")
, (MSG_DONTROUTE, "MSG_DONTROUTE")
, (MSG_PEEK, "MSG_PEEK")
, (MSG_EOR, "MSG_EOR")
, (MSG_TRUNC, "MSG_TRUNC")
, (MSG_CTRUNC, "MSG_CTRUNC")
, (MSG_WAITALL, "MSG_WAITALL")
]
-}
|