我想读取句柄上的所有数据,然后阻塞等待更多数据。当流中有'\n‘字符时,listen1停止。listen2可以工作,并且可以通过模仿hGetNonBlocking的代码使其完全通用。做这件事最好的方法是什么?
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))
)发布于 2010-05-24 05:35:37
也许您没有意识到,或者我误解了您的目标,但是network-bytestring已经做了您想要的事情。
https://stackoverflow.com/questions/2893064
复制相似问题