module Bindings.Posix.Sys.Select where
import Foreign
import Foreign.C
import Bindings.Posix.Sys.Types
import Bindings.Posix.Time
import Bindings.Posix.Signal
data C'timeval = C'timeval {timeval'tv_sec :: CTime , timeval'tv_usec :: C'suseconds_t }
instance Storable C'timeval where
sizeOf _ = 8
alignment = sizeOf
peek p = do
v0 <- peekByteOff p 0
v1 <- peekByteOff p 4
return $ C'timeval v0 v1
poke p (C'timeval v0 v1 ) = do
pokeByteOff p 0 v0
pokeByteOff p 4 v1
return ()
data C'fd_set = C'fd_set
instance Storable C'fd_set where
sizeOf _ = 128
alignment = sizeOf
peek p = do
return $ C'fd_set
poke p (C'fd_set ) = do
return ()
c'FD_SETSIZE = 1024 ; c'FD_SETSIZE :: (Num a) => a
foreign import ccall "inline_FD_CLR" c'FD_CLR :: CInt -> Ptr C'fd_set -> IO ()
foreign import ccall "inline_FD_ISSET" c'FD_ISSET :: CInt -> Ptr C'fd_set -> IO CInt
foreign import ccall "inline_FD_SET" c'FD_SET :: CInt -> Ptr C'fd_set -> IO ()
foreign import ccall "inline_FD_ZERO" c'FD_ZERO :: Ptr C'fd_set -> IO ()
foreign import ccall "pselect" c'pselect :: CInt -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'timespec -> Ptr C'sigset_t -> IO CInt
foreign import ccall "&pselect" p'pselect :: FunPtr (CInt -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'timespec -> Ptr C'sigset_t -> IO CInt)
foreign import ccall "select" c'select :: CInt -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'timeval -> IO CInt
foreign import ccall "&select" p'select :: FunPtr (CInt -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'fd_set -> Ptr C'timeval -> IO CInt)