[Haskell-cafe] hSetBuffering woes
Eric
eeoam at ukfsn.org
Sat Jun 16 15:14:26 EDT 2007
Bryan O'Sullivan wrote:
> Eric wrote:
>
>> I tried to turn off buffering with the command hSetBuffering (from
>> System.IO) but my app still blocks on hGetContents (from
>> Data.ByteString). Does anyone know what's happening?
>
> The hGetContents function can't behave the way you want, because it's
> defined to return the entire rest of the input stream.
>
> If you want to stick with strict ByteStrings, use hGetNonBlocking
> instead, but you'll need to block between reads of the handle
> yourself, using System.IO.hWaitForInput.
>
> Otherwise, use lazy ByteStrings. That version of hGetContents will
> lazily yield chunks that are as big as can be read without blocking as
> they arrive (up to a limit of 64KB), and will hWaitForInput for you.
>
> <b
>
>
>
I've converted to lazy bytestrings. After reading in the bytes from a
network connection I want to save them to a file but now the appendFile
function blocks:
import Data.ByteString.Lazy as LazyBits(ByteString, empty, hGetContents,
writeFile, appendFile)
...
LazyBits.appendFile filepath bits -- this blocks now!
How can I fix this?
E.
More information about the Haskell-Cafe
mailing list