sockets-0.4.0.0: src-internal/Hybrid/Send/MutableBytes/AddrLength.hs
{-# language DuplicateRecordFields #-}
module Hybrid.Send.MutableBytes.AddrLength
( sendOnce
) where
import Data.Bytes.Types (MutableBytes(..),UnmanagedBytes(..))
import Foreign.C.Error (Errno)
import Foreign.C.Types (CSize)
import GHC.Exts (RealWorld)
import System.Posix.Types (Fd)
import Data.Primitive.ByteArray.Offset (MutableByteArrayOffset(..))
import qualified Posix.Socket as S
sendOnce ::
Fd
-> MutableBytes RealWorld
-> UnmanagedBytes
-> IO (Either Errno CSize)
sendOnce fd (MutableBytes bufA offA lenA) (UnmanagedBytes bufB lenB) =
S.uninterruptibleSendMessageB fd
(MutableByteArrayOffset {array=bufA,offset=offA}) (intToCSize lenA)
bufB (intToCSize lenB)
S.noSignal
intToCSize :: Int -> CSize
intToCSize = fromIntegral