{-# LANGUAGE BangPatterns #-}
module Network.Socket.ByteString.Lazy.Windows
(
-- * Send data to a socket
send
, sendAll
) where
import Control.Applicative ((<$>))
import Control.Monad (unless)
import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as L
import Data.Int (Int64)
import Network.Socket (Socket(..))
import qualified Network.Socket.ByteString as Socket
-- -----------------------------------------------------------------------------
-- Sending
send :: Socket -- ^ Connected socket
-> L.ByteString -- ^ Data to send
-> IO Int64 -- ^ Number of bytes sent
send sock s = do
fromIntegral <$> case L.toChunks s of
-- TODO: Consider doing nothing if the string is empty.
[] -> Socket.send sock S.empty
(x:_) -> Socket.send sock x
sendAll :: Socket -- ^ Connected socket
-> L.ByteString -- ^ Data to send
-> IO ()
sendAll sock bs = do
sent <- send sock bs
let bs' = L.drop sent bs
unless (L.null bs') $ sendAll sock bs'