以下の関数は、0MQ Haskellバインディングに基づいています。実行時にエラーが発生します。エラーはgetIntOpt: interrupted (Interrupted system call)
と表示され、プログラムは停止します。0MQでのランタイムエラーHaskellバインディング:getIntOpt:割り込み(中断されたシステムコール)
おそらく私が使用しているコマンドラインオプションで何かしなければならないし、基準のために破棄する必要がありますか?
編集:cmdArgsを使用して自分のコードを残してもエラーが発生することがわかりました。 実際にははるかに興味深い問題があります。最後の段落hereを参照してください。しかし、私はそれを効果的に処理する方法がまだありません。
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)]
ありがとうございました。私は、ここから 'スロー'または 'キャッチ'で何かを修正することができます:http://haskell.org/ghc/docs/6.12.1/html/libraries/base/Control-Exception.html ?? –
あなたは 'IOException'をキャッチすることができますが、' GHC.IO.Exception'をインポートせずに 'errno'値を取得する標準的な方法を見つけることができませんでした。' GHC.IO.Exception'をインポートせずに、 errnoはEINTRだった。 –
悪いです。高いメッセージング周波数では、頻繁に起こります。最終的に、これはHaskell全体を実世界のアプリケーションでは役に立たないものにする可能性があります。 –