
Hi Scott, On Mon, Apr 09, 2007 at 10:03:55AM -0600, Scott Bell wrote:
Have you got a complete (but preferably small) program showing the problem?
Great example, thanks! Sorry for the delay in tracking it down.
main :: IO () main = do (_, h, _, p) <- runInteractiveCommand "telnet nyx.nyx.net" t <- hGetContentsTimeout h 15000 print t >> terminateProcess p
The input handle is being garbage collected and closed, so telnet is exiting. Try: main :: IO () main = do (hin, h, _, p) <- runInteractiveCommand "telnet nyx.nyx.net" t <- hGetContentsTimeout h 15000 print t hClose hin terminateProcess p Note that you can't do either the hClose or terminateProcess before you have forced the whole string (which print does here). You might prefer to pass hin and p to hGetContentsTimeout, and have it close/terminate them just before the return "".
hGetContentsTimeout :: Handle -> Int -> IO String hGetContentsTimeout h t = do hSetBuffering stdin NoBuffering ready <- hWaitForInput h t; eof <- hIsEOF h
You'll also need to remove the hIsEOF call from your code, or having decided that nothing is ready it will then block, waiting to see if there is an end of file or not. Thanks Ian