Ticket #4885: udpsend.hs

File udpsend.hs, 824 bytes (added by zukerman, 4 years ago)
Line 
1{-# LANGUAGE DeriveDataTypeable #-}
2
3import Control.Applicative
4import Control.Monad
5import Network.Socket
6import System.Console.CmdArgs
7
8import qualified Data.ByteString as B
9import qualified Network.Socket.ByteString as N
10
11data UdpSend = UdpSend { host :: String
12                       , port :: Int
13                       } deriving (Show, Data, Typeable)
14
15udpSend = cmdArgsMode $ UdpSend
16  { host = def &= typ "HOST" &= argPos 0
17  , port = def &= typ "PORT" &= argPos 1
18  } &= summary "udpsend v0.1 (c) Itai Zukerman 2011"
19
20main = do args <- cmdArgsRun udpSend
21          host <- inet_addr $ host args
22          sock <- socket AF_INET Datagram 0
23          let addr = SockAddrInet (fromIntegral $ port args) host
24          lines <- cycle . B.split 10 <$> B.getContents
25          mapM_ (\bs -> N.sendTo sock bs addr) lines