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