@@ -37,43 +37,39 @@ import Language.PureScript.Ide.Util
3737import Language.PureScript.Ide.Error
3838import Language.PureScript.Ide.Types
3939import Language.PureScript.Ide.Watcher
40- import Network hiding (socketPort , accept )
41- import Network.BSD (getProtocolNumber )
42- import Network.Socket hiding (PortNumber , Type ,
43- sClose )
40+ import qualified Network.Socket as Network
4441import qualified Options.Applicative as Opts
4542import System.Directory
4643import System.Info as SysInfo
4744import System.FilePath
4845import System.IO hiding (putStrLn , print )
4946import System.IO.Error (isEOFError )
5047
51- listenOnLocalhost :: PortNumber -> IO Socket
48+ listenOnLocalhost :: Network. PortNumber -> IO Network. Socket
5249listenOnLocalhost port = do
53- proto <- getProtocolNumber " tcp"
54- localhost <- inet_addr " 127.0.0.1"
50+ addr: _ <- Network. getAddrInfo Nothing (Just " 127.0.0.1" ) (Just (show port))
5551 bracketOnError
56- (socket AF_INET Stream proto )
57- sClose
52+ (Network. socket ( Network. addrFamily addr) ( Network. addrSocketType addr) ( Network. addrProtocol addr) )
53+ Network. close
5854 (\ sock -> do
59- setSocketOption sock ReuseAddr 1
60- bind sock (SockAddrInet port localhost )
61- listen sock maxListenQueue
55+ Network. setSocketOption sock Network. ReuseAddr 1
56+ Network. bind sock (Network. addrAddress addr )
57+ Network. listen sock Network. maxListenQueue
6258 pure sock)
6359
6460data ServerOptions = ServerOptions
6561 { _serverDirectory :: Maybe FilePath
6662 , _serverGlobs :: [FilePath ]
6763 , _serverOutputPath :: FilePath
68- , _serverPort :: PortNumber
64+ , _serverPort :: Network. PortNumber
6965 , _serverNoWatch :: Bool
7066 , _serverPolling :: Bool
7167 , _serverLoglevel :: IdeLogLevel
7268 , _serverEditorMode :: Bool
7369 } deriving (Show )
7470
7571data ClientOptions = ClientOptions
76- { clientPort :: PortID
72+ { clientPort :: Network. PortNumber
7773 }
7874
7975command :: Opts. Parser (IO () )
@@ -96,15 +92,18 @@ command = Opts.helper <*> subcommands where
9692 T. putStrLn (" Couldn't connect to purs ide server on port " <> show clientPort <> " :" )
9793 print e
9894 exitFailure
99- h <- connectTo " 127.0.0.1" clientPort `catch` handler
95+ addr: _ <- Network. getAddrInfo Nothing (Just " 127.0.0.1" ) (Just (show clientPort))
96+ sock <- Network. socket (Network. addrFamily addr) (Network. addrSocketType addr) (Network. addrProtocol addr)
97+ Network. connect sock (Network. addrAddress addr) `catch` handler
98+ h <- Network. socketToHandle sock ReadWriteMode
10099 T. hPutStrLn h =<< T. getLine
101100 BS8. putStrLn =<< BS8. hGetLine h
102101 hFlush stdout
103102 hClose h
104103
105104 clientOptions :: Opts. Parser ClientOptions
106- clientOptions = ClientOptions . PortNumber . fromIntegral <$>
107- Opts. option Opts. auto (Opts. long " port" <> Opts. short ' p' <> Opts. value (4242 :: Integer ))
105+ clientOptions = ClientOptions . fromIntegral <$>
106+ Opts. option Opts. auto (Opts. long " port" `mappend` Opts. short ' p' `mappend` Opts. value (4242 :: Integer ))
108107
109108 server :: ServerOptions -> IO ()
110109 server opts'@ (ServerOptions dir globs outputPath port noWatch polling logLevel editorMode) = do
@@ -159,12 +158,12 @@ command = Opts.helper <*> subcommands where
159158 -- #2209 and #2414 for explanations
160159 flipIfWindows = map (if SysInfo. os == " mingw32" then not else identity)
161160
162- startServer :: PortNumber -> IdeEnvironment -> IO ()
163- startServer port env = withSocketsDo $ do
161+ startServer :: Network. PortNumber -> IdeEnvironment -> IO ()
162+ startServer port env = Network. withSocketsDo $ do
164163 sock <- listenOnLocalhost port
165164 runLogger (confLogLevel (ideConfiguration env)) (runReaderT (forever (loop sock)) env)
166165 where
167- loop :: (Ide m , MonadLogger m ) => Socket -> m ()
166+ loop :: (Ide m , MonadLogger m ) => Network. Socket -> m ()
168167 loop sock = do
169168 accepted <- runExceptT (acceptCommand sock)
170169 case accepted of
@@ -197,8 +196,10 @@ catchGoneHandle =
197196 putText (" [Error] psc-ide-server tried interact with the handle, but the connection was already gone." )
198197 _ -> throwIO e)
199198
200- acceptCommand :: (MonadIO m , MonadLogger m , MonadError Text m )
201- => Socket -> m (Text , Handle )
199+ acceptCommand
200+ :: (MonadIO m , MonadLogger m , MonadError Text m )
201+ => Network. Socket
202+ -> m (Text , Handle )
202203acceptCommand sock = do
203204 h <- acceptConnection
204205 $ (logDebug) " Accepted a connection"
@@ -216,8 +217,8 @@ acceptCommand sock = do
216217 where
217218 acceptConnection = liftIO $ do
218219 -- Use low level accept to prevent accidental reverse name resolution
219- (s,_) <- accept sock
220- h <- socketToHandle s ReadWriteMode
220+ (s,_) <- Network. accept sock
221+ h <- Network. socketToHandle s ReadWriteMode
221222 hSetEncoding h utf8
222223 hSetBuffering h LineBuffering
223224 pure h
0 commit comments