Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell MongoDB问题(关闭管道)?_Mongodb_Haskell_Driver - Fatal编程技术网

Haskell MongoDB问题(关闭管道)?

Haskell MongoDB问题(关闭管道)?,mongodb,haskell,driver,Mongodb,Haskell,Driver,使用此驱动程序: 我无法关闭到MongoDB的管道(连接)。实际上,我可以做其他事情,比如成功地将内容插入数据库,但之后我无法关闭管道 我想确认或否认问题是否出在司机身上。有人能证实/否认吗 我正在使用以下代码: {-# LANGUAGE OverloadedStrings, ExtendedDefaultRules #-} import Database.MongoDB import Control.Monad.Trans (liftIO) main = do pipe <

使用此驱动程序:

我无法关闭到MongoDB的管道(连接)。实际上,我可以做其他事情,比如成功地将内容插入数据库,但之后我无法关闭管道

我想确认或否认问题是否出在司机身上。有人能证实/否认吗

我正在使用以下代码:

{-# LANGUAGE OverloadedStrings, ExtendedDefaultRules #-}

import Database.MongoDB
import Control.Monad.Trans (liftIO)

main = do
    pipe <- runIOE $ connect (host "127.0.0.1")
    close pipe
{-#语言重载字符串,ExtendedDefaultRules}
导入数据库.MongoDB
进口控制单体转运(liftIO)
main=do
管道来自源头

 hGetN :: Handle -> Int -> IO ByteString
-- ^ Read N bytes from hande, blocking until all N bytes are read. If EOF is reached before N bytes then raise EOF exception.
hGetN h n = assert (n >= 0) $ do
bytes <- hGet h n
let x = fromEnum $ S.length bytes
if x >= n then return bytes
else if x == 0 then ioError (mkIOError eofErrorType "hGetN" (Just h) Nothing)
else S.append bytes <$> hGetN h (n - x)
hGetN::Handle->Int->IO ByteString
--^从hande读取N个字节,直到读取所有N个字节为止。如果在N字节之前达到EOF,则引发EOF异常。
hGetN h n=assert(n>=0)$do
字节=n,然后返回字节
否则,如果x==0,则为ioError(mkIOError eofErrorType“hGetN”(仅h)Nothing)
else S S.append字节hGetN h(n-x)
因此,如果你看一下我以前的帖子,我认为很有可能管道侦听线程在hGet上“卡住”,等待更多的数据

有两种方法可以解决这个问题,但我认为基本上是司机做错了。
Ie必须从辅助线程关闭套接字。

使用关闭管道时会发生什么?我认为管道本身不是实际的tcp/ip/unixsocket句柄。所以我肯定认为你的管道是关闭的,但手柄可能不是(但过一会儿就会关闭)。close语句将向管道的listenpart发送killthread并关闭streamSee update on question。在什么操作系统下?win32/linux/mac?我假设您已经使用ghc-threadedstrange编译了您的示例,但似乎没有其他人抱怨过这个问题。除非有人提出更好的答案,否则我会接受你的。