Skip to content

Instantly share code, notes, and snippets.

@xrl
Created May 5, 2011 07:56
Show Gist options
  • Save xrl/956696 to your computer and use it in GitHub Desktop.
Save xrl/956696 to your computer and use it in GitHub Desktop.
UDP dumper
import System.Environment
import Network.Socket
main :: IO()
main = do
args <- getArgs
startNetworkStuff args
startNetworkStuff ["publish", target, port, msg] = do
publish target port msg
startNetworkStuff ["subscribe", port] = do
subscribe port
startNetworkStuff nothing = do
putStrLn "Usage"
putStrLn "./pmnc publish target port"
putStrLn "./pmnc subscribe port"
publish target port msg = do
infos <- getAddrInfo Nothing (Just target) (Just port)
sock <- socket (getAddrFamily infos) Datagram defaultProtocol -- why do I need Datagram AND defaultProtocol?
retval <- sendTo sock msg (getServerAddr infos)
putStrLn $ show retval
subscribe port = do
infos <- getAddrInfo Nothing Nothing (Just port)
sock <- socket (getAddrFamily infos) Datagram defaultProtocol
bindSocket sock (getServerAddr infos)
procMessages sock
where procMessages sock = do (msg, _, addr) <- recvFrom sock 1024
putStrLn msg
procMessages sock
getAddrFamily = addrFamily . head
getServerAddr = addrAddress . head
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment