module SocketActivation.GetSockets where
import Essentials
import Control.Monad.IO.Class (MonadIO (liftIO))
import Data.Either (Either)
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 $
IO' getFileDescriptorList >>= traverse (liftIO . fdSocket)
fdSocket :: Fd -> IO Socket
fdSocket (Fd i) = Net.mkSocket i