2013-02-11 45 views
6

我在Haskell中編寫服務器,我想在斷開連接後明確關閉客戶端。當我撥打hClose時,該線程將阻塞,直到客戶端關閉手柄的一側。有沒有辦法讓它關閉而沒有阻塞?Haskell hClose blocking

在此先感謝!

+0

異步啓動它?看看http://hackage.haskell.org/packages/archive/async/2.0.1.4/doc/html/Control-Concurrent-Async.html – jozefg 2013-02-11 03:51:59

+2

我建議使用一些高級庫,例如[conduit](( http://hackage.haskell.org/package/conduit)。它將爲您處理所有這些低級別的東西,您可以專注於實現實際的應用程序邏輯。 – 2013-02-11 09:49:41

回答

10

當然,只是在另一個線程中運行它:

import Control.Concurrent (forkIO) 

forkIO (hClose handle) 

由於jozefg指出的那樣,你可以使用票友的解決方案,如在async發現,但我沒有在這種情況下明白了一個道理來。

+0

當然,這並不會阻止從相關句柄讀取時阻塞的任何線程。一個解決方案能夠正確解鎖讀者,就是使用這些函數從Network.Socket中的套接字中讀取數據,但這有點讓人頭疼......有趣的是,自我描述的低級接口如何與線程正常工作,但是更高級的接口不... – javawizard 2013-03-01 06:12:24