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.
- type EvLoopPtr = Ptr EvLoop
- evDefaultLoop :: CInt -> IO EvLoopPtr
- evLoopNew :: CUInt -> IO EvLoopPtr
- evLoop :: EvLoopPtr -> CInt -> IO ()
- evUnloop :: EvLoopPtr -> CInt -> IO ()
- evLoopDestroy :: EvLoopPtr -> IO ()
- 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
- type CEventType = CInt
- type CEvFlagType = CInt
- ev_read :: CEventType
- ev_write :: CEventType
- type EvIoPtr = Ptr EvIo
- type IoCallback = EvLoopPtr -> EvIoPtr -> CEventType -> IO ()
- mkEvIo :: IO EvIoPtr
- mkEvTimer :: IO EvTimerPtr
- freeEvIo :: EvIoPtr -> IO ()
- freeEvTimer :: EvTimerPtr -> IO ()
- mkIoCallback :: IoCallback -> IO (FunPtr IoCallback)
- mkTimerCallback :: TimerCallback -> IO (FunPtr TimerCallback)
- freeIoCallback :: FunPtr IoCallback -> IO ()
- freeTimerCallback :: FunPtr TimerCallback -> IO ()
- evIoInit :: EvIoPtr -> FunPtr IoCallback -> CInt -> CEventType -> IO ()
- evIoStart :: EvLoopPtr -> EvIoPtr -> IO ()
- evIoStop :: EvLoopPtr -> EvIoPtr -> IO ()
- type EvTimerPtr = Ptr EvTimer
- type TimerCallback = EvLoopPtr -> EvTimerPtr -> CEventType -> IO ()
- evTimerInit :: EvTimerPtr -> FunPtr TimerCallback -> EvTimestamp -> EvTimestamp -> IO ()
- evTimerStart :: EvLoopPtr -> EvTimerPtr -> IO ()
- evTimerStop :: EvLoopPtr -> EvTimerPtr -> IO ()
- type EvTimestamp = CDouble
- evNow :: EvLoopPtr -> IO EvTimestamp
- evTime :: IO EvTimestamp
- 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 ()
Event loops
evDefaultLoop :: CInt -> IO EvLoopPtrSource
evLoopDestroy :: EvLoopPtr -> IO ()Source
Flags for evDefaultLoop
evRecommendedBackends :: IO CEvFlagTypeSource
Returns the default set of CEvFlagType
flags
Event flags
type CEventType = CIntSource
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 CEvFlagType = CIntSource
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
ev_io
See libev docs: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_io_code_is_this_file_descrip
type IoCallback = EvLoopPtr -> EvIoPtr -> CEventType -> IO ()Source
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.
mkEvTimer :: IO EvTimerPtrSource
Makes a new ev_timer
struct using malloc
. You are responsible for freeing
it with freeEvTimer
.
freeEvTimer :: EvTimerPtr -> IO ()Source
free() an EvIoPtr
mkIoCallback :: IoCallback -> IO (FunPtr IoCallback)Source
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
.
mkTimerCallback :: TimerCallback -> IO (FunPtr TimerCallback)Source
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
.
freeIoCallback :: FunPtr IoCallback -> IO ()Source
evIoInit :: EvIoPtr -> FunPtr IoCallback -> CInt -> CEventType -> IO ()Source
ev_timer
See libev docs: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_timer_code_relative_and_opti
type EvTimerPtr = Ptr EvTimerSource
type TimerCallback = EvLoopPtr -> EvTimerPtr -> CEventType -> IO ()Source
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.
evTimerInit :: EvTimerPtr -> FunPtr TimerCallback -> EvTimestamp -> EvTimestamp -> IO ()Source
evTimerStart :: EvLoopPtr -> EvTimerPtr -> IO ()Source
evTimerStop :: EvLoopPtr -> EvTimerPtr -> IO ()Source
Time functions
type EvTimestamp = CDoubleSource
Libev timestamp values are C doubles containing the (floating) number of seconds since Jan 1, 1970.
evNow :: EvLoopPtr -> IO EvTimestampSource
Fetch a the cached copy of the current time from a loop.
evTime :: IO EvTimestampSource
Fetches the current time from the operating system. Usually evNow
is
preferred since it avoids a context switch by returning a cached value.
C utility functions
c_setnonblocking :: CInt -> IO ()Source