File: Flag.hsc

package info (click to toggle)
haskell-network 3.1.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 736 kB
  • sloc: sh: 3,264; haskell: 2,002; ansic: 536; makefile: 3
file content (99 lines) | stat: -rw-r--r-- 2,223 bytes parent folder | download | duplicates (2)
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")
    ]
-}