pipes-extra-0.2.0: examples/telnet.hs
import Control.Concurrent (forkIO)
import qualified Control.Exception as E
import Control.Pipe
import Control.Pipe.Binary
import Network (connectTo, PortID (..))
import System.Environment (getArgs, getProgName)
import System.IO
main :: IO ()
main = do
args <- getArgs
case args of
[host, port] -> telnet host (read port :: Int)
_ -> usageExit
where
usageExit = do
name <- getProgName
putStrLn $ "Usage : " ++ name ++ " host port"
hConnect :: Handle -> Handle -> IO ()
hConnect h1 h2 = runPipe $ handleReader h1 >+> handleWriter h2
telnet :: String -> Int -> IO ()
telnet host port = E.bracket
(connectTo host (PortNumber (fromIntegral port)))
hClose
(\hsock -> do
mapM_ (`hSetBuffering` LineBuffering) [ stdin, stdout, hsock ]
_ <- forkIO $ hConnect stdin hsock
hConnect hsock stdout)