diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2017-08-03 21:26:33 +0300 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2017-08-03 21:32:06 +0300 |
commit | b1a599a6df4100ca1da6e778d1fdade3efe01451 (patch) | |
tree | 88e4e16c6f242cb92473d899cdfa0f10c84ddd4e /src/IRE/Server.hs | |
parent | 1c621db4b5b0d78ae6b2f79c71122c6cca2a0815 (diff) | |
download | ire-master.tar.gz |
Diffstat (limited to 'src/IRE/Server.hs')
-rw-r--r-- | src/IRE/Server.hs | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/src/IRE/Server.hs b/src/IRE/Server.hs index 8dabc73..3a095a5 100644 --- a/src/IRE/Server.hs +++ b/src/IRE/Server.hs @@ -1,24 +1,28 @@ -module IRE.Server ( - server -) where +module IRE.Server + ( server + ) where -import Control.Exception.Base (throwIO, catch, bracket) -import Data.Yaml.Include (decodeFileEither) +import Control.Exception.Base (bracket, catch, throwIO) import Data.Bits ((.|.)) -import Network.Socket (socket, setSocketOption, bind, listen, close, - maxListenQueue, getSocketName, inet_addr, Family(AF_UNIX, AF_INET), - SocketType(Stream), SocketOption(ReuseAddr), Socket, SockAddr(..)) -import Network.Wai.Handler.Warp (Port, defaultSettings, runSettingsSocket) +import Data.Yaml.Include (decodeFileEither) +import Network.Socket + (Family(AF_INET, AF_UNIX), SockAddr(..), Socket, + SocketOption(ReuseAddr), SocketType(Stream), bind, close, + getSocketName, inet_addr, listen, maxListenQueue, setSocketOption, + socket) +import Network.Wai.Handler.Warp + (Port, defaultSettings, runSettingsSocket) import System.Exit (exitFailure) import System.IO (hPutStrLn, stderr) import System.IO.Error (isDoesNotExistError) -import System.Posix.Files ( fileExist, groupReadMode, groupWriteMode, - ownerReadMode, ownerWriteMode, removeLink, setFileMode, socketMode ) +import System.Posix.Files + (fileExist, groupReadMode, groupWriteMode, ownerReadMode, + ownerWriteMode, removeLink, setFileMode, socketMode) import IRE.Application (app) import IRE.Config (ConfigFile(..), defaultConfig) -import IRE.YOLO (newDetector) import qualified IRE.Logging as Log +import IRE.YOLO (newDetector) type Listen = Either Port FilePath @@ -29,37 +33,36 @@ server rootDir configFile = do Log.start Log.Debug let socketSpec = case cfSocket cf of - Just p -> Right p + Just p -> Right p Nothing -> Left $ cfPort cf bracket (createSocket socketSpec) closeSocket - ( \sock -> do - listen sock maxListenQueue - runSettingsSocket defaultSettings sock =<< app rootDir net) - + (\sock -> do + listen sock maxListenQueue + runSettingsSocket defaultSettings sock =<< app rootDir net) readConfigFile :: FilePath -> IO ConfigFile readConfigFile f = do e <- fileExist f - if e then do - r <- decodeFileEither f - case r of - Left ex -> do - hPutStrLn stderr $ "FATAL: " ++ f ++ ": " ++ show ex - exitFailure - Right cf -> return cf - else return defaultConfig - + if e + then do + r <- decodeFileEither f + case r of + Left ex -> do + hPutStrLn stderr $ "FATAL: " ++ f ++ ": " ++ show ex + exitFailure + Right cf -> return cf + else return defaultConfig createSocket :: Listen -> IO Socket createSocket (Right path) = do removeIfExists path sock <- socket AF_UNIX Stream 0 bind sock $ SockAddrUnix path - setFileMode path $ socketMode - .|. ownerWriteMode .|. ownerReadMode - .|. groupWriteMode .|. groupReadMode + setFileMode path $ + socketMode .|. ownerWriteMode .|. ownerReadMode .|. groupWriteMode .|. + groupReadMode Log.info $ "Listening on UNIX socket `" ++ path ++ "'" return sock createSocket (Left port) = do @@ -70,7 +73,6 @@ createSocket (Left port) = do Log.info $ "Listening on localhost:" ++ show port return sock - closeSocket :: Socket -> IO () closeSocket sock = do name <- getSocketName sock @@ -79,10 +81,9 @@ closeSocket sock = do SockAddrUnix path -> removeIfExists path _ -> return () - removeIfExists :: FilePath -> IO () removeIfExists fileName = removeLink fileName `catch` handleExists - where handleExists e - | isDoesNotExistError e = return () - | otherwise = throwIO e - + where + handleExists e + | isDoesNotExistError e = return () + | otherwise = throwIO e |