on master help sign in
Merge pull request #329 from obsidiansystems/dn-check-ss

Check if ss command is available on system

commit67486cf349c2b38e253a63390ce1c7031077e6a5 authorLuigy Leon <luichi.19@gmail.com> dateWed 19 Dec 2018, 10:25 (8 years ago) parentc8116e55aeb14d
1 file changed+10−4
lib/run/src/Obelisk/Run.hs+10−4
lib/run/src/Obelisk/Run.hs+10−4
@@ -58,6 +58,7 @@ import Snap.Core (Snap)
5858import System.Environment
5959import System.IO
6060import System.Process
61+import System.Exit (ExitCode(..))
6162import Text.URI (URI)
6263import qualified Text.URI as URI
6364import Text.URI.Lens
@@ -170,10 +171,15 @@ logPortBindErr p e = getProcessIdForPort p >>= \case
170171
171172getProcessIdForPort :: Int -> IO (Maybe Int)
172173getProcessIdForPort port = do
173− xs <- lines <$> readProcess "ss" ["-lptn", "sport = " <> show port] mempty
174− case uncons xs of
175− Just (_, x:_) -> return $ A.maybeResult $ A.parse parseSsPid $ BSC.pack x
176− _ -> return Nothing
174+ -- First check if 'ss' is available
175+ (c, _, _) <- readProcessWithExitCode "which" ["ss"] mempty
176+ case c of
177+ ExitSuccess -> do
178+ xs <- lines <$> readProcess "ss" ["-lptn", "sport = " <> show port] mempty
179+ case uncons xs of
180+ Just (_, x:_) -> return $ A.maybeResult $ A.parse parseSsPid $ BSC.pack x
181+ _ -> return Nothing
182+ _ -> return Nothing
177183
178184parseSsPid :: A.Parser Int
179185parseSsPid = do