Blame examples/EchoServer.hs
|
Packit |
090c59 |
-- Echo server program
|
|
Packit |
090c59 |
module Main where
|
|
Packit |
090c59 |
|
|
Packit |
090c59 |
import Control.Monad (unless)
|
|
Packit |
090c59 |
import Network.Socket hiding (recv)
|
|
Packit |
090c59 |
import qualified Data.ByteString as S
|
|
Packit |
090c59 |
import Network.Socket.ByteString (recv, sendAll)
|
|
Packit |
090c59 |
|
|
Packit |
090c59 |
main :: IO ()
|
|
Packit |
090c59 |
main = withSocketsDo $
|
|
Packit |
090c59 |
do addrinfos <- getAddrInfo
|
|
Packit |
090c59 |
(Just (defaultHints {addrFlags = [AI_PASSIVE]}))
|
|
Packit |
090c59 |
Nothing (Just "3000")
|
|
Packit |
090c59 |
let serveraddr = head addrinfos
|
|
Packit |
090c59 |
sock <- socket (addrFamily serveraddr) Stream defaultProtocol
|
|
Packit |
090c59 |
bind sock (addrAddress serveraddr)
|
|
Packit |
090c59 |
listen sock 1
|
|
Packit |
090c59 |
(conn, _) <- accept sock
|
|
Packit |
090c59 |
talk conn
|
|
Packit |
090c59 |
close conn
|
|
Packit |
090c59 |
close sock
|
|
Packit |
090c59 |
|
|
Packit |
090c59 |
where
|
|
Packit |
090c59 |
talk :: Socket -> IO ()
|
|
Packit |
090c59 |
talk conn =
|
|
Packit |
090c59 |
do msg <- recv conn 1024
|
|
Packit |
090c59 |
unless (S.null msg) $ sendAll conn msg >> talk conn
|