{-# language BangPatterns #-}
{-# language DataKinds #-}
{-# language DuplicateRecordFields #-}
{-# language LambdaCase #-}
{-# language MagicHash #-}
{-# language NamedFieldPuns #-}
{-# language UnboxedTuples #-}
module Socket.Datagram.Interruptible.MutableBytes.Many
( receiveMany
, receiveManyFromIPv4
) where
import Control.Concurrent.STM (TVar)
import Socket (Interruptibility(Interruptible))
import Socket (Connectedness(..))
import Socket.Datagram (Socket(..),ReceiveException)
import Socket.Discard (PeerlessSlab(..))
import Socket.IPv4 (IPv4Slab(..))
import qualified Socket as SCK
import qualified Socket.Datagram.Interruptible.MutableBytes.Receive.Many.Unit as RU
import qualified Socket.Datagram.Interruptible.MutableBytes.Receive.Many.IPv4 as RV4
receiveMany ::
TVar Bool
-> Socket c a
-> Socket.Discard.PeerlessSlab
-> IO (Either (ReceiveException 'Interruptible) Int)
receiveMany intr (Socket fd) (Socket.Discard.PeerlessSlab{sizes,payloads}) =
RU.receiveMany intr fd sizes () payloads
receiveManyFromIPv4 ::
TVar Bool
-> Socket 'Unconnected ('SCK.Internet 'SCK.V4)
-> Socket.IPv4.IPv4Slab
-> IO (Either (ReceiveException 'Interruptible) Int)
receiveManyFromIPv4 intr (Socket fd) (Socket.IPv4.IPv4Slab{sizes,peers,payloads}) =
RV4.receiveMany intr fd sizes peers payloads