Projects / libev


Libev is a high-performance event loop for C (with optional and separate interfaces for C++ and Perl), featuring support for I/O, timers (relative and absolute, cron-like ones), signals, process status changes, and other types of events. It has both a fast native API and libevent emulation to support programs written using the libevent API. Differences to libevent include higher speed, simpler design, more features, less memory usage, embedability, and no arbitrary limits. libev supports epoll, kqueue, Solaris event ports, poll, and select.

Operating Systems

Recent releases

  •  14 Jan 2011 11:23

    Release Notes: This release works around epoll problems with /dev/random and other devices, officially supports polling files with all backends, works around a bunch of eventport-related kernel bugs in Solaris, and implements interfaces so that multithreaded programs can do their own custom signal handling.

    •  05 Nov 2010 23:11

      Release Notes: This release concentrates on bugfixes and API changes, not on major features. Apart from making many function names more logical (while providing backward compatibility to libev 3.x), there are improvements in the documentation, a better minimal mechanism (you can now have a full event library with epoll in 5kb of code). The majority of changes, however, are small to medium bugfixes in the core, the epoll, poll, and ports backend as well as many compatibility fixes and bug workarounds for systems as dead as AIX, kernel backends as broken as epoll, and PITAs as painful as Darwin and Windows.

      •  31 Dec 2009 07:08

        Release Notes: This release fixes a larger number of minor portability issues and bugs. It also disables signalfd usage by default, as too much software is broken and gets confused by blocked signals (e.g. glib's threadpool). On the feature side, ev_stat watchers now guarantee a difference between previous and current stats, libev will take advantage of inotify_init1 if available, idle watchers can now be disabled when embedding, and the C++ API now has an ev::timer->remaining () method.

        •  09 Aug 2009 12:39

          Release Notes: This release fixes a bug caused by ev_default_destroy not properly freeing all resources. It also contains a lot of changes to the signal handling. Most notably, it is now allowed to start signal watchers in any loop, given that they do not bind on the same signal. On GNU/Linux systems, libev will now take avdantage of signalfd functionality if available, and will also use thread-safe variants of the epoll_create/signalfd and eventfd syscalls, when available.

          •  17 Jul 2009 14:41

            Release Notes: This release most notably adds hooking functionality to make it easier to share event loops between multiple threads. It fixes a bug in ev_unloop and multiple threads, improves timing precision under Windows, and improves the documentation in many areas. The recursion depth and the remaining time for a timeout can now be queried, the io_collect_interval interpretation has changed slightly, there is now a reduced API option, and a number of minor bugs w.r.t. configuration have been fixed.


            Project Spotlight


            A Fluent OpenStack client API for Java.


            Project Spotlight

            TurnKey TWiki Appliance

            A TWiki appliance that is easy to use and lightweight.