сеть haskell io hgetline - PullRequest
       17

сеть haskell io hgetline

2 голосов
/ 23 мая 2010

Я хочу прочитать все данные на дескрипторе, а затем заблокировать ожидание дополнительных данных. listen1 останавливается, когда в потоке есть символ '\ n'. 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))
       )

1 Ответ

1 голос
/ 24 мая 2010

Возможно, вы не знаете, или я неправильно понимаю вашу цель, но network-bytestring делает то, что вы уже хотите.

...