on master help sign in
Merge pull request #4540 from melted/fix_network
8b1efd4Niklas Larsson
idris.cabal+1−1
@@ -291,7 +291,7 @@ Library
291 , ieee754 >= 0.7 && < 0.9
291 , ieee754 >= 0.7 && < 0.9
292 , megaparsec >= 6.2
292 , megaparsec >= 6.2
293 , mtl >= 2.1 && < 2.3
293 , mtl >= 2.1 && < 2.3
294− , network < 2.7
294+ , network < 2.8
295 , optparse-applicative >= 0.13 && < 0.15
295 , optparse-applicative >= 0.13 && < 0.15
296 , pretty < 1.2
296 , pretty < 1.2
297 , process < 1.7
297 , process < 1.7
src/Idris/REPL.hs+11−7
@@ -81,7 +81,7 @@ import Idris.TypeSearch (searchByType)
81import Idris.WhoCalls
81import Idris.WhoCalls
82import IRTS.CodegenCommon
82import IRTS.CodegenCommon
83import IRTS.Compiler
83import IRTS.Compiler
84−import Network
84+import Network.Socket hiding (defaultPort)
85#if (MIN_VERSION_base(4,11,0))
85#if (MIN_VERSION_base(4,11,0))
86import Prelude hiding (id, (.), (<$>), (<>))
86import Prelude hiding (id, (.), (<$>), (<>))
87#else
87#else
@@ -166,7 +166,8 @@ startServer port orig fn_in = do tid <- runIO $ forkIO (serverLoop port)
166 fn = fromMaybe "" (listToMaybe fn_in)
166 fn = fromMaybe "" (listToMaybe fn_in)
167
167
168 loop fn ist sock
168 loop fn ist sock
169− = do (h,_,_) <- accept sock
169+ = do (s, _) <- accept sock
170+ h <- socketToHandle s ReadWriteMode
170 hSetEncoding h utf8
171 hSetEncoding h utf8
171 cmd <- hGetLine h
172 cmd <- hGetLine h
172 let isth = case idris_outputmode ist of
173 let isth = case idris_outputmode ist of
@@ -218,9 +219,11 @@ processNetCmd orig i h fn cmd
218runClient :: Maybe PortNumber -> String -> IO ()
219runClient :: Maybe PortNumber -> String -> IO ()
219runClient port str = withSocketsDo $ do
220runClient port str = withSocketsDo $ do
220 let port' = fromMaybe defaultPort port
221 let port' = fromMaybe defaultPort port
221− res <- X.try (connectTo "localhost" $ PortNumber port')
222+ s <- socket AF_INET Stream defaultProtocol
223+ res <- X.try (connect s (SockAddrInet port' $ tupleToHostAddress (127,0,0,1)))
222 case res of
224 case res of
223− Right h -> do
225+ Right () -> do
226+ h <- socketToHandle s ReadWriteMode
224 hSetEncoding h utf8
227 hSetEncoding h utf8
225 hPutStrLn h str
228 hPutStrLn h str
226 resp <- hGetResp "" h
229 resp <- hGetResp "" h
@@ -245,7 +248,8 @@ initIdemodeSocket :: IO Handle
245initIdemodeSocket = do
248initIdemodeSocket = do
246 (sock, port) <- listenOnLocalhostAnyPort
249 (sock, port) <- listenOnLocalhostAnyPort
247 putStrLn $ show port
250 putStrLn $ show port
248− (h, _, _) <- accept sock
251+ (s, _) <- accept sock
252+ h <- socketToHandle s ReadWriteMode
249 hSetEncoding h utf8
253 hSetEncoding h utf8
250 return h
254 return h
251
255
@@ -1229,8 +1233,8 @@ process fn (Prove mode n')
1229 let metavars = mapMaybe (\n -> do c <- lookup n (idris_metavars ist); return (n, c)) ns
1233 let metavars = mapMaybe (\n -> do c <- lookup n (idris_metavars ist); return (n, c)) ns
1230 n <- case metavars of
1234 n <- case metavars of
1231 [] -> ierror (Msg $ "Cannot find metavariable " ++ show n')
1235 [] -> ierror (Msg $ "Cannot find metavariable " ++ show n')
1232− [(n, (_,_,_,False,_))] -> return n
1236+ [(n, (_,_,_,False,_))] -> return n
1233− [(_, (_,_,_,_,False))] -> ierror (Msg "Can't prove this hole as it depends on other holes")
1237+ [(_, (_,_,_,_,False))] -> ierror (Msg "Can't prove this hole as it depends on other holes")
1234 [(_, (_,_,_,True,_))] -> ierror (Msg "Declarations not solvable using prover")
1238 [(_, (_,_,_,True,_))] -> ierror (Msg "Declarations not solvable using prover")
1235 ns -> ierror (CantResolveAlts (map fst ns))
1239 ns -> ierror (CantResolveAlts (map fst ns))
1236 prover (toplevelWith fn) mode (lit fn) n
1240 prover (toplevelWith fn) mode (lit fn) n
src/Util/Net.hs+9−12
@@ -8,36 +8,33 @@ Maintainer : The Idris Community.
8module Util.Net (listenOnLocalhost, listenOnLocalhostAnyPort) where
8module Util.Net (listenOnLocalhost, listenOnLocalhostAnyPort) where
9
9
10import Control.Exception (bracketOnError)
10import Control.Exception (bracketOnError)
11−import Network hiding (socketPort)
11+import Network.Socket
12−import Network.BSD (getProtocolNumber)
13−import Network.Socket hiding (sClose)
14−
15-- Copied from upstream impl of listenOn
12-- Copied from upstream impl of listenOn
16-- bound to localhost interface instead of iNADDR_ANY
13-- bound to localhost interface instead of iNADDR_ANY
17listenOnLocalhost :: PortNumber -> IO Socket
14listenOnLocalhost :: PortNumber -> IO Socket
18listenOnLocalhost port = do
15listenOnLocalhost port = do
19− proto <- getProtocolNumber "tcp"
16+ let hints = defaultHints { addrSocketType = Stream }
20− localhost <- inet_addr "127.0.0.1"
17+ localhost:_ <- getAddrInfo (Just hints) (Just "127.0.0.1") (Just $ show port)
21 bracketOnError
18 bracketOnError
22− (socket AF_INET Stream proto)
19+ (socket AF_INET Stream defaultProtocol)
23 (close)
20 (close)
24 (\sock -> do
21 (\sock -> do
25 setSocketOption sock ReuseAddr 1
22 setSocketOption sock ReuseAddr 1
26− bind sock (SockAddrInet port localhost)
23+ bind sock (addrAddress localhost)
27 listen sock maxListenQueue
24 listen sock maxListenQueue
28 return sock
25 return sock
29 )
26 )
30
27
31listenOnLocalhostAnyPort :: IO (Socket, PortNumber)
28listenOnLocalhostAnyPort :: IO (Socket, PortNumber)
32listenOnLocalhostAnyPort = do
29listenOnLocalhostAnyPort = do
33− proto <- getProtocolNumber "tcp"
30+ let hints = defaultHints { addrSocketType = Stream }
34− localhost <- inet_addr "127.0.0.1"
31+ localhost:_ <- getAddrInfo (Just hints) (Just "127.0.0.1") (Just "0")
35 bracketOnError
32 bracketOnError
36− (socket AF_INET Stream proto)
33+ (socket AF_INET Stream defaultProtocol)
37 (close)
34 (close)
38 (\sock -> do
35 (\sock -> do
39 setSocketOption sock ReuseAddr 1
36 setSocketOption sock ReuseAddr 1
40− bind sock (SockAddrInet aNY_PORT localhost)
37+ bind sock (addrAddress localhost)
41 listen sock maxListenQueue
38 listen sock maxListenQueue
42 port <- socketPort sock
39 port <- socketPort sock
43 return (sock, port)
40 return (sock, port)