-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | FFI interface to libev
--
-- FFI interface to libev
@package hlibev
@version 0.2.3
-- | Network.Libev is a low-level binding to the libev library
-- (http://libev.schmorp.de/). The libev documentation is
-- available here:
-- http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod.
module Network.Libev
type EvLoopPtr = Ptr EvLoop
evDefaultLoop :: CInt -> IO EvLoopPtr
evLoopNew :: CUInt -> IO EvLoopPtr
evLoop :: EvLoopPtr -> CInt -> IO ()
evUnloop :: EvLoopPtr -> CInt -> IO ()
evLoopDestroy :: EvLoopPtr -> IO ()
-- | Returns the default set of CEvFlagType flags
evRecommendedBackends :: IO CEvFlagType
evflag_auto :: CEvFlagType
evflag_noenv :: CEvFlagType
evbackend_select :: CEvFlagType
evbackend_poll :: CEvFlagType
evbackend_epoll :: CEvFlagType
evbackend_kqueue :: CEvFlagType
evbackend_devpoll :: CEvFlagType
evbackend_port :: CEvFlagType
-- | MutexCallback is called by ev_set_loop_release_cb
type MutexCallback = EvLoopPtr -> IO ()
-- | Set up the given loop for mutex locking from haskell-land -- if you
-- want to touch the loop from other Haskell threads, you'll need to do
-- this. The two FunPtr objects returned need to be explicitly freed with
-- freeMutexCallback.
--
-- IMPORTANT: if you want multithreaded access to an EvLoopPtr,
-- you'll have to acquire the MVar returned here (using
-- withMVar) whenever you call any of the ev functions.
-- Very bad C-land crash/bang/boom could otherwise result.
--
-- ALSO IMPORTANT: any changes you make to an EvLoopPtr from
-- another thread while the event loop thread is blocked inside
-- ev_loop() will NOT take effect until the the event loop
-- thread unblocks. You'll need to set up an ev_async watcher in
-- order to wake up the event loop thread.
setupLockingForLoop :: EvLoopPtr -> IO (FunPtr MutexCallback, FunPtr MutexCallback, MVar ())
freeMutexCallback :: FunPtr MutexCallback -> IO ()
-- | CEventType is a bitfield used to flag whether a file descriptor
-- is readable, writable, or both. Valid values are ev_read and
-- ev_write. TODO: deprecate and replace by a datatype
type CEventType = CInt
-- | CEvFlagType is a bitfield used to pass flags into
-- evDefaultLoop. Values (evflag_auto, evflag_noenv,
-- etc.) are combined with bitwise or. TODO: replace with a newtype with
-- a monoid instance
type CEvFlagType = CInt
ev_read :: CEventType
ev_write :: CEventType
type EvIoPtr = Ptr EvIo
-- | An IoCallback is called when a file descriptor becomes readable
-- or writable. It takes a pointer to an ev_loop structure, a
-- pointer to an ev_io structure, and an event mask.
type IoCallback = EvLoopPtr -> EvIoPtr -> CEventType -> IO ()
-- | Makes a new ev_io struct using malloc. You are
-- responsible for freeing it with freeEvIo.
mkEvIo :: IO (EvIoPtr)
-- | free() an EvIoPtr
freeEvIo :: EvIoPtr -> IO ()
-- | Wrap up an IoCallback so it can be delivered into C-land. This
-- resource is not garbage-collected, you are responsible for freeing it
-- with freeIoCallback.
mkIoCallback :: IoCallback -> IO (FunPtr IoCallback)
freeIoCallback :: FunPtr IoCallback -> IO ()
evIoInit :: EvIoPtr -> FunPtr IoCallback -> CInt -> CEventType -> IO ()
evIoStart :: EvLoopPtr -> EvIoPtr -> IO ()
evIoStop :: EvLoopPtr -> EvIoPtr -> IO ()
type EvTimerPtr = Ptr EvTimer
-- | A TimerCallback is called when a timer expires. It takes a
-- pointer to an ev_loop structure, a pointer to an
-- ev_io structure, and an (unused?) event mask.
type TimerCallback = EvLoopPtr -> EvTimerPtr -> CEventType -> IO ()
-- | Makes a new ev_timer struct using malloc. You are
-- responsible for freeing it with freeEvTimer.
mkEvTimer :: IO (EvTimerPtr)
-- | free() an EvTimer
freeEvTimer :: EvTimerPtr -> IO ()
-- | Wrap up a TimerCallback so it can be delivered into C-land.
-- This resource is not garbage-collected, you are responsible for
-- freeing it with freeTimerCallback.
mkTimerCallback :: TimerCallback -> IO (FunPtr TimerCallback)
freeTimerCallback :: FunPtr TimerCallback -> IO ()
evTimerInit :: EvTimerPtr -> FunPtr TimerCallback -> EvTimestamp -> EvTimestamp -> IO ()
evTimerStart :: EvLoopPtr -> EvTimerPtr -> IO ()
evTimerStop :: EvLoopPtr -> EvTimerPtr -> IO ()
evTimerAgain :: EvLoopPtr -> EvTimerPtr -> IO ()
evTimerRemaining :: EvLoopPtr -> EvTimerPtr -> IO (CDouble)
type EvAsyncPtr = Ptr EvAsync
-- | An AsyncCallback is called when you wakeup an event loop with
-- ev_async_send
type AsyncCallback = EvLoopPtr -> EvAsyncPtr -> CEventType -> IO ()
-- | Makes a new ev_async struct using malloc. You are
-- responsible for freeing it with freeEvAsync.
mkEvAsync :: IO (EvAsyncPtr)
-- | free() an EvAsync
freeEvAsync :: EvAsyncPtr -> IO ()
evAsyncInit :: EvAsyncPtr -> FunPtr AsyncCallback -> IO ()
evAsyncSend :: EvLoopPtr -> EvAsyncPtr -> IO ()
evAsyncStart :: EvLoopPtr -> EvAsyncPtr -> IO ()
evAsyncStop :: EvLoopPtr -> EvAsyncPtr -> IO ()
-- | Wrap up an AsyncCallback so it can be delivered into C-land.
-- This resource is not garbage-collected, you are responsible for
-- freeing it with freeAsyncCallback.
mkAsyncCallback :: AsyncCallback -> IO (FunPtr AsyncCallback)
freeAsyncCallback :: FunPtr AsyncCallback -> IO ()
-- | Libev timestamp values are C doubles containing the (floating) number
-- of seconds since Jan 1, 1970.
type EvTimestamp = CDouble
-- | Fetch a the cached copy of the current time from a loop.
evNow :: EvLoopPtr -> IO EvTimestamp
-- | Fetches the current time from the operating system. Usually
-- evNow is preferred since it avoids a context switch by
-- returning a cached value.
evTime :: IO EvTimestamp
-- | Calls accept() and sets the socket non-blocking.
c_accept :: CInt -> IO (CInt)
c_close :: CInt -> IO (CInt)
c_read :: CInt -> CString -> CSize -> IO (CSize)
c_write :: CInt -> CString -> CSize -> IO (CSize)
c_setnonblocking :: CInt -> IO ()
instance Storable EvAsync
instance Storable EvTimer
instance Storable EvIo
instance Storable EvWatcher