module SocketActivation.GetSockets where import Control.Monad (Monad ((>>=))) import Control.Monad.IO.Class (MonadIO (liftIO)) import Data.Either (Either) import Data.Function ((.)) import Data.Traversable (Traversable (traverse)) import System.IO (IO) import qualified Network.Socket as Net import SocketActivation.Concepts (Socket, Fd (..), Error) import SocketActivation.GetFileDescriptors (getFileDescriptorList) import SocketActivation.IO (IO' (IO', run)) getSocketList :: IO (Either Error [Socket]) getSocketList = run (getFds >>= convertToSockets) where getFds = IO' getFileDescriptorList convertToSockets = traverse (liftIO . fdSocket) fdSocket :: Fd -> IO Socket fdSocket (Fd i) = Net.mkSocket i