TCP funciona en GHCi, almacenado en búfer hasta que el programa sale en el programa compilado con Leksah

StackOverflow https://stackoverflow.com/questions/5890054

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
¿Fue útil?

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".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top