以下の機能は、デュアタイムが到来して復帰するまで受信して待ちます。ループが終了していません
今、受信して応答すると動作します。 ackが受信されず、duetimeになるまで正常に動作します。
デュアタイムに達すると、フリーズします。私の自己構築ループを正しく終了していないようです。私はif-then-elseでも試しましたが、同じ結果です。私はwhileMを使いたくない。
ループを正しく終了するにはどうすればよいですか?
import Network.Socket hiding (send, sendTo, recv, recvFrom)
import Network.Socket.ByteString
waitAck s duetime' = do
print ("in")
(a, _) <- recvFrom s 4711
now' <- getPOSIXTime
unless (B.unpack a == "ack") (when (now' < duetime') (waitAck s duetime'))
print (B.unpack a)
return()
を - あなたはタイムアウト後の入力を待って停止するように何の指示を得なかっました渡します。あなたは['select'](http://linux.die.net/man/2/select)に相当するhaskellを見つける必要があります。 – rampion
'recvFrom'は、タイムアウトのためにIMHOがブロックしていない –