diff --git a/Hash2Pub/.gitignore b/Hash2Pub/.gitignore index 1cf9163..c45bfa4 100644 --- a/Hash2Pub/.gitignore +++ b/Hash2Pub/.gitignore @@ -2,3 +2,5 @@ dist-newstyle/ *.local *.swp *.swo +*.o +*.hi diff --git a/Hash2Pub/demoserver b/Hash2Pub/demoserver new file mode 100755 index 0000000..3c98f51 Binary files /dev/null and b/Hash2Pub/demoserver differ diff --git a/Hash2Pub/demoserver.hs b/Hash2Pub/demoserver.hs new file mode 100644 index 0000000..50a6ccc --- /dev/null +++ b/Hash2Pub/demoserver.hs @@ -0,0 +1,34 @@ +{-# LANGUAGE OverloadedStrings #-} +module Main where + +import Network.Socket hiding (sendTo, recvFrom) +import Network.Socket.ByteString +import Control.Concurrent +import Control.Exception +import Control.Monad (forever) +import System.IO ( + IOMode (ReadWriteMode) + , hPutStrLn + ) +import qualified Data.ByteString as BS + +main = do + sock <- socket AF_INET6 Datagram defaultProtocol + let hints = defaultHints { addrFamily = AF_INET6, addrSocketType = Datagram} + addrInfos <- getAddrInfo (Just hints) (Just "::1") (Just "7331") + let serverAddr = addrAddress . head $ addrInfos + print serverAddr + bind sock serverAddr + print sock + forever $ do + receivedStuff <- recvFrom sock 65535 -- blocks + forkIO $ bracket newSendSocket close' (serveReceive receivedStuff) + return () + +serveReceive (msg, fromAddr) sendSocket = do + putStrLn $ "Got message " ++ show msg ++ " from " ++ show fromAddr + sendTo sendSocket ("Hi, thx for " `BS.append` msg) fromAddr + return () + +newSendSocket :: IO Socket +newSendSocket = socket AF_INET6 Datagram defaultProtocol