start prototyping a UDP socket server, ideas on UDP parsing
- start implementing a socket-based UDP server (cannot reply yet) - some brainstorming about how to parse incoming UDP packet commands
This commit is contained in:
parent
76e7c60b96
commit
303a6ecbfa
2
Hash2Pub/.gitignore
vendored
2
Hash2Pub/.gitignore
vendored
|
@ -2,3 +2,5 @@ dist-newstyle/
|
||||||
*.local
|
*.local
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
|
*.o
|
||||||
|
*.hi
|
||||||
|
|
BIN
Hash2Pub/demoserver
Executable file
BIN
Hash2Pub/demoserver
Executable file
Binary file not shown.
34
Hash2Pub/demoserver.hs
Normal file
34
Hash2Pub/demoserver.hs
Normal file
|
@ -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
|
Loading…
Reference in a new issue