下面的函數想要接收和確認,或者等到其到期時間到來並返回。循環未終止
現在,它收到並確認後就能正常工作。當沒有收到確認時它會正常工作並等待到期。
當到期時間結束。它似乎沒有正確退出我自己構建的循環。我也嘗試過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'是恕我直言,不阻止 –