2010-05-23 83 views
2

我想讀取句柄上的所有數據,然後阻止等待更多數據。 listen1在流中存在'\ n'字符時停止。 listen2的作品,可以通過模仿hGetNonBlocking的代碼完全一般化。做這個的最好方式是什麼?haskell網絡io hgetline

import qualified Data.ByteString as B 

loop = sequence_ . repeat 

listen1 :: Handle -> TChan B.ByteString -> IO() 
listen1 sock chan = do 
    loop (do 
     s <- B.hGetLine sock 
     atomically (writeTChan chan s) 
     ) 

listen2 :: Handle -> TChan B.ByteString -> IO() 
listen2 sock chan = do 
    loop (do 
     s <- B.hGet sock 1 
     s1 <- B.hGetNonBlocking sock 65000 
     atomically (writeTChan chan (B.append s s1)) 
     ) 
+3

順便說一下,'loop'已經在標準庫中作爲'forever'。 – 2010-05-24 01:37:57

回答

1

也許你不知道也許我誤解你的目標,但network-bytestring你想要做什麼已經。