From cfb6e810527d7e1aaf695813869baaa6bb4915f3 Mon Sep 17 00:00:00 2001 From: Kazu Yamamoto Date: Thu, 16 Jan 2020 11:19:35 +0900 Subject: [PATCH] adding filterCmsg. --- Network/Socket.hs | 1 + Network/Socket/Posix/Cmsg.hsc | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Network/Socket.hs b/Network/Socket.hs index 650e3c3c..1c5a416a 100644 --- a/Network/Socket.hs +++ b/Network/Socket.hs @@ -229,6 +229,7 @@ module Network.Socket ,CmsgIdIPv6PktInfo) -- ** APIs for control message , lookupCmsg + , filterCmsg , decodeCmsg , encodeCmsg -- ** Class and yypes for control message diff --git a/Network/Socket/Posix/Cmsg.hsc b/Network/Socket/Posix/Cmsg.hsc index 4f8d95d6..71620951 100644 --- a/Network/Socket/Posix/Cmsg.hsc +++ b/Network/Socket/Posix/Cmsg.hsc @@ -75,9 +75,13 @@ pattern CmsgIdFd = CmsgId (#const SOL_SOCKET) (#const SCM_RIGHTS) -- > (lookupCmsg CmsgIdIPv4TOS cmsgs >>= decodeCmsg) :: Maybe IPv4TOS lookupCmsg :: CmsgId -> [Cmsg] -> Maybe Cmsg lookupCmsg _ [] = Nothing -lookupCmsg aid (cmsg@(Cmsg cid _):cmsgs) - | aid == cid = Just cmsg - | otherwise = lookupCmsg aid cmsgs +lookupCmsg cid (cmsg:cmsgs) + | cmsgId cmsg == cid = Just cmsg + | otherwise = lookupCmsg cid cmsgs + +-- | Filtering control message. +filterCmsg :: CmsgId -> [Cmsg] -> [Cmsg] +filterCmsg cid cmsgs = filter (\cmsg -> cmsgId cmsg == cid) cmsgs ----------------------------------------------------------------