TCP funciona em GHCi, armazenado em buffer até a saída do programa no programa compilado com Leksah
-
28-10-2019 - |
Pergunta
Escrevi este cliente de protótipo simples para enviar comandos a um servidor que estou desenvolvendo.Funciona perfeitamente rodando em GHCi, mas a versão compilada armazena tudo que foi digitado até que eu digite "quit" e o programa saia.Nesse ponto, todo o texto de entrada é enviado.
O que estou fazendo de errado?E por que é diferente quando compilado?
Atualização: funciona conforme o esperado se compilado com ghc Main.hs
.O problema acontece quando compilado com Leksah via Package -> Build.Alguém sabe como obter a linha de comando que Leksah está usando?
Informações do sistema: OSX 10.6, GHC 7.0.3, rede 2.3.0.2
module Main (
main
) where
import System.IO
import Network
main = do
hServer <- connectTo "localhost" (PortNumber 7000)
hSetBuffering hServer NoBuffering
loop hServer
hClose hServer
where loop :: Handle -> IO ()
loop hServer = do
s <- getLine
hPutStrLn hServer s
case s of "quit" -> return ()
otherwise -> loop hServer
Solução 2
Hmm, parece que Leksah não estava realmente construindo o aplicativo quando eu pensei que estava.Devo ter executado um código antigo sem a chamada hSetBuffering
.Uma limpeza e reconstrução resolveu tudo.Pedimos desculpas e obrigado a todos por seu tempo e ajuda.
editar: Encontrado - no caso de alguém ficar confuso com isso, quando package-> build é clicado, o Leksah não gera um aplicativo compilado se estiver no modo debug / ghci.
Outras dicas
Leksah usa "compilação cabal", versões anteriores "compilação de instalação do runhaskell".