diff --git a/Network/Socket/Msg/CMsgHdr.hsc b/Network/Socket/Msg/CMsgHdr.hsc
--- a/Network/Socket/Msg/CMsgHdr.hsc
+++ b/Network/Socket/Msg/CMsgHdr.hsc
@@ -106,9 +106,10 @@
 cmsgExtractData p = do
     let dataPtr = castPtr $ c_cmsg_data p
     dataLen <- cmsghdrLen <$> peek p
+    let dataSize = (fromIntegral dataLen) - (fromIntegral $ c_cmsg_len 0)
     if dataPtr == nullPtr
         then return Nothing
-        else return.Just =<< B.packCStringLen (dataPtr, fromIntegral dataLen)
+        else return.Just =<< B.packCStringLen (dataPtr, dataSize)
 
 peekCMsg :: Ptr CMsgHdr -> IO (Maybe CMsg)
 peekCMsg pCMsgHdr =
diff --git a/network-msg.cabal b/network-msg.cabal
--- a/network-msg.cabal
+++ b/network-msg.cabal
@@ -1,5 +1,5 @@
 name: network-msg
-version: 0.7
+version: 0.8
 category: Network
 build-type: Simple 
 cabal-version: >= 1.6
