packages feed

systemd-socket-activation-1: src/SocketActivation/GetSockets.hs

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
import           SocketActivation.GetFileDescriptors
import           SocketActivation.IO

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