下面的函数想要接收和确认,或者等到其到期时间到来并返回。循环未终止
现在,它收到并确认后就能正常工作。当没有收到确认时它会正常工作并等待到期。
当到期时间结束。它似乎没有正确退出我自己构建的循环。我也尝试过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()
所以,你检查'duetime''是你已经收到了一些数据后唯一的一次 - 你有没有指令停止超时后等待输入经过。你需要找到相当于['select']的haskell(http://linux.die.net/man/2/select)。 – rampion
'recvFrom'是恕我直言,不阻止 –