recv-0.0.0: Network/Socket/BufferPool/Types.hs
module Network.Socket.BufferPool.Types where
import Data.ByteString (ByteString)
import Data.IORef
import Data.Word (Word8)
import Foreign.Ptr (Ptr)
-- | Type for buffer.
type Buffer = Ptr Word8
-- | Type for buffer size.
type BufSize = Int
-- | Type for read buffer pool.
data BufferPool = BufferPool {
minBufSize :: Int -- ^ If the buffer is larger than or equal to this size,
-- the buffer is used.
-- Otherwise, a new buffer is allocated.
-- The thrown buffer is eventually freed.
, maxBufSize :: Int
, poolBuffer :: IORef ByteString
}
-- | Type for the receiving function with a buffer pool.
type Recv = IO ByteString
-- | Type for the receiving function with a buffer.
-- The result boolean indicates whether or not the buffer is fully filled.
type RecvBuf = Buffer -> BufSize -> IO Bool
-- | Type for the receiving function which receives N bytes.
type RecvN = Int -> IO ByteString