packages feed

zeromq-haskell-0.8.4: examples/poll.hs

import Control.Applicative
import Control.Monad
import System.IO
import System.Exit
import System.Environment
import qualified System.ZMQ as ZMQ
import qualified Data.ByteString as SB

main :: IO ()
main = do
    args <- getArgs
    when (length args /= 1) $ do
        hPutStrLn stderr usage
        exitFailure
    ZMQ.withContext 1 $ \c ->
        ZMQ.withSocket c ZMQ.Rep $ \s -> do
            let bindTo = head args
                toPoll = [ZMQ.S s ZMQ.In]
            ZMQ.bind s bindTo
            forever $
                ZMQ.poll toPoll 1000000 >>= receive
 where
    receive []               = return ()
    receive ((ZMQ.S s e):ss) = do
        msg <- ZMQ.receive s []
        ZMQ.send s msg []
        receive ss

usage :: String
usage = "usage: poll <bind-to>"