module Network.Socket.Msg.MsgHdr
( MsgHdr(..)
) where
import Foreign.C.Types (CInt, CSize)
import Foreign.Ptr (Ptr)
import Foreign.Storable (Storable(..))
import Network.Socket (SockAddr)
import Network.Socket.Msg.IOVec (IOVec)
data MsgHdr = MsgHdr
{ msgName :: !(Ptr SockAddr)
, msgNameLen :: !CSize
, msgIov :: !(Ptr IOVec)
, msgIovLen :: !CSize
, msgControl :: !(Ptr ())
, msgControlLen :: !CSize
, msgFlags :: !CInt
} deriving (Show)
instance Storable MsgHdr where
sizeOf _ = (56)
alignment _ = alignment (undefined :: CInt)
peek p = do
name <- ((\hsc_ptr -> peekByteOff hsc_ptr 0)) p
nameLen <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p
iov <- ((\hsc_ptr -> peekByteOff hsc_ptr 16)) p
iovLen <- ((\hsc_ptr -> peekByteOff hsc_ptr 24)) p
control <- ((\hsc_ptr -> peekByteOff hsc_ptr 32)) p
controlLen <- ((\hsc_ptr -> peekByteOff hsc_ptr 40)) p
flags <- ((\hsc_ptr -> peekByteOff hsc_ptr 48)) p
return $! MsgHdr name nameLen iov iovLen control controlLen flags
poke p mh = do
((\hsc_ptr -> pokeByteOff hsc_ptr 0)) p (msgName mh)
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) p (msgNameLen mh)
((\hsc_ptr -> pokeByteOff hsc_ptr 16)) p (msgIov mh)
((\hsc_ptr -> pokeByteOff hsc_ptr 24)) p (msgIovLen mh)
((\hsc_ptr -> pokeByteOff hsc_ptr 32)) p (msgControl mh)
((\hsc_ptr -> pokeByteOff hsc_ptr 40)) p (msgControlLen mh)
((\hsc_ptr -> pokeByteOff hsc_ptr 48)) p (msgFlags mh)