2013-02-11 43 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