packages feed

network-light-0.1.0.6: examples/Server.hs

module Server where
import System.Network
import Secret

main :: IO ()
main = do
  sfd <- socket AF_INET SOCK_STREAM
  setsocketopt sfd SO_REUSEADDR 1
  bind sfd (mkSockAddr 9900 Nothing)
  listen sfd 2
  serve sfd

serve :: Socket -> IO ()
serve sfd = do
  putStrLn "accepting"
  (fd, addr) <- accept sfd
  putStrLn $ "got connection " ++ show addr
  sec <- recvString fd (length secret)
  if (sec == secret) then do
    str <- recvString fd 1000
    putStrLn $ "echoing"
    sendString fd (reverse str)
    return ()
   else do
    putStrLn "bad secret"
  close fd
  serve sfd