Приведенная ниже функция основана на привязках 0MQ Haskell. Я получаю ошибку во время выполнения. Ошибка говорит getIntOpt: interrupted (Interrupted system call)
и программа останавливается.
Вероятно, это связано с параметрами командной строки, которые я использую, а затем отбрасываю из-за критерия?
Изменить: обнаружил, что я получаю сообщение об ошибке также, когда оставляю свой собственный код без cmdArgs. На самом деле существует гораздо более интересная проблема. См. последний абзац здесь. Но я до сих пор понятия не имею, как с этим эффективно бороться.
sendReceive :: B.ByteString -> IO ()
sendReceive datastring = withContext 1 $ \context -> do
withSocket context Req $ \requester -> do
--putStrLn "Connecting ..."
connect requester "tcp://192.168.35.84:5559"
let tryOnePing (!c, !f) i = do
send requester datastring []
--putStrLn "Sent ..."
r <- receive requester []
--putStrLn "Received ..."
return $ case B.unpack r of
datastring -> (c+1, f)
_ -> (c, f+1)
(c,f) <- foldM tryOnePing (0,0) [1 .. 1000]
-- c and f are not used in this example
return ()
main = do
n <- cmdArgsRun strlen
let datastring = B.pack (take (byte n) $ randomRs ('a','z') (mkStdGen 3))
putStrLn "Starting..."
withArgs [] $ defaultMain [bench "sendReceive" $ whnfIO (sendReceive datastring)]