Echo server: Difference between revisions

1,099 bytes added ,  14 years ago
add Haskell example
(→‎{{header|Common Lisp}}: note should have usocket)
(add Haskell example)
Line 473:
(echo-server 12321)
</lang>
 
=={{header|Haskell}}==
 
<lang haskell>module Main where
import Network (withSocketsDo, accept, listenOn, sClose, PortID(PortNumber))
import Control.Monad (forever)
import System.IO (hGetLine, hPutStrLn, hFlush, hClose)
import System.IO.Error (isEOFError)
import Control.Concurrent (forkIO)
import Control.Exception (bracket)
 
-- For convenience in testing, ensure that the listen socket is closed if the main loop is aborted
withListenOn port body = bracket (listenOn port) sClose body
 
echo (handle, host, port) = catch doOneLine stop where
doOneLine = do line <- hGetLine handle
print (host, port, init line)
hPutStrLn handle line
hFlush handle
doOneLine
stop error = do putStrLn $ "Closed connection from " ++ show (host, port) ++ " due to " ++ show error
hClose handle
 
main = withSocketsDo $ do
withListenOn (PortNumber 12321) $ \listener ->
forever $ do
acc@(_, host, port) <- accept listener
putStrLn $ "Accepted connection from " ++ show (host, port)
forkIO (echo acc)</lang>
 
=={{header|Python}}==