29 lines
787 B
29 lines
787 B
module Main where |
|
|
|
import Control.Monad (forever) |
|
import Network.Socket hiding (recv) |
|
import Network.Socket.ByteString (recv, sendAll) |
|
|
|
logAndEcho :: Socket -> IO () |
|
logAndEcho sock = forever $ do |
|
(soc, _) <- accept sock |
|
printAndKickback soc |
|
sClose soc |
|
where printAndKickback conn = do |
|
msg <- recv conn 1024 |
|
print msg |
|
sendAll conn msg |
|
|
|
|
|
main :: IO () |
|
main = withSocketsDo $ do |
|
addrinfos <- getAddrInfo |
|
(Just (defaultHints {addrFlags = [AI_PASSIVE]})) |
|
Nothing |
|
(Just "79") |
|
let serveraddr = head addrinfos |
|
sock <- socket (addrFamily serveraddr) Stream defaultProtocol |
|
bindSocket sock (addrAddress serveraddr) |
|
listen sock 1 |
|
logAndEcho sock |
|
sClose sock |