TCP funciona en GHCi, almacenado en búfer hasta que el programa sale en el programa compilado con Leksah
-
28-10-2019 - |
Pregunta
Escribí este simple prototipo de cliente para enviar comandos a un servidor que estoy desarrollando.Funciona perfectamente ejecutándose en GHCi, pero la versión compilada almacena en búfer todo lo escrito hasta que escribo "salir" y el programa se cierra.En ese momento se envía todo el texto de entrada.
¿Qué estoy haciendo mal?¿Y por qué es diferente cuando se compila?
Actualización: funciona como se esperaba si se compila con ghc Main.hs
.El problema ocurre cuando se compila con Leksah a través de Package -> Build.¿Alguien sabe cómo obtener la línea de comandos que usa Leksah?
Información del sistema: OSX 10.6, GHC 7.0.3, red 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
Solución 2
Mmm, parece que Leksah en realidad no estaba creando la aplicación cuando yo pensaba que sí.Debo haber estado ejecutando código antiguo sin la llamada hSetBuffering
.Una limpieza y reconstrucción lo ha solucionado.Disculpas y gracias a todos por su tiempo y ayuda.
editar: Lo encontré - en caso de que alguien más se confunda con esto, cuando se hace clic en package-> build, Leksah no genera una aplicación compilada si está en modo debug / ghci.
Otros consejos
Leksah usa "cabal build", las versiones anteriores "runhaskell Setup build".