TCP работает в GHCi, буферизируется до завершения программы в программе, скомпилированной с Leksah - PullRequest
4 голосов
/ 05 мая 2011

Я написал этот простой клиент-прототип для отправки команд на сервер, который я разрабатываю. Он отлично работает в GHCi, но скомпилированная версия буферизирует все набранное, пока я не наберу "quit" и программа не закроется. В этот момент весь введенный текст отправляется.

Что я делаю не так? И почему это отличается при компиляции?

Обновление: работает правильно, если скомпилировано с ghc Main.hs. Проблема возникает при компиляции с Leksah через Package -> Build. Кто-нибудь знает, как получить командную строку, которую использует Лекса?

Информация о системе: OSX 10.6, GHC 7.0.3, сеть 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

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Хм, кажется, Лекса не собирала приложение, когда я думала, что это так.Должно быть, я запускал старый код без вызова hSetBuffering.Чистая и восстановленная уже разобралась.Извинения и спасибо всем за ваше время и помощь.

edit: Обнаружил это - в случае, если кто-то еще смущается этим, когда нажимается package-> build, Leksah не генерируетскомпилированное приложение, если оно в режиме отладки / ghci.

1 голос
/ 05 мая 2011

Leksah использует "сборку Cabal", более старые версии "сборка установки runhaskell".

...