
On Thu, 7 Aug 2003, Simon Marlow wrote:
It's not quite the same as calling streamGetAvailable. flush would discard data that is buffered on the Haskell side, whereas streamGetAvailable might grab any data that is buffered in the OS.
I'm not sure whether this is useful or not, but it's exactly what hFlush does currently.
Here's the code for hFlush from the GHC 6.0 sources: --------------------------------------------------------------------------- -- hFlush -- The action `hFlush hdl' causes any items buffered for output -- in handle `hdl' to be sent immediately to the operating -- system. hFlush :: Handle -> IO () hFlush handle = wantWritableHandle "hFlush" handle $ \ handle_ -> do buf <- readIORef (haBuffer handle_) if bufferIsWritable buf && not (bufferEmpty buf) then do flushed_buf <- flushWriteBuffer (haFD handle_) (haIsStream handle_) buf writeIORef (haBuffer handle_) flushed_buf else return () I'm not sure what it does to input buffers, but it doesn't seem like it's designed to do anything to them. -- Ben