1*663afb9bSAndroid Build Coastguard Worker /* 2*663afb9bSAndroid Build Coastguard Worker * Copyright (c) 2000-2007 Niels Provos <[email protected]> 3*663afb9bSAndroid Build Coastguard Worker * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson 4*663afb9bSAndroid Build Coastguard Worker * 5*663afb9bSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*663afb9bSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*663afb9bSAndroid Build Coastguard Worker * are met: 8*663afb9bSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 9*663afb9bSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 10*663afb9bSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 11*663afb9bSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 12*663afb9bSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 13*663afb9bSAndroid Build Coastguard Worker * 3. The name of the author may not be used to endorse or promote products 14*663afb9bSAndroid Build Coastguard Worker * derived from this software without specific prior written permission. 15*663afb9bSAndroid Build Coastguard Worker * 16*663afb9bSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17*663afb9bSAndroid Build Coastguard Worker * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18*663afb9bSAndroid Build Coastguard Worker * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19*663afb9bSAndroid Build Coastguard Worker * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20*663afb9bSAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21*663afb9bSAndroid Build Coastguard Worker * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22*663afb9bSAndroid Build Coastguard Worker * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23*663afb9bSAndroid Build Coastguard Worker * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24*663afb9bSAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25*663afb9bSAndroid Build Coastguard Worker * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26*663afb9bSAndroid Build Coastguard Worker */ 27*663afb9bSAndroid Build Coastguard Worker #ifndef EVENT2_EVENT_H_INCLUDED_ 28*663afb9bSAndroid Build Coastguard Worker #define EVENT2_EVENT_H_INCLUDED_ 29*663afb9bSAndroid Build Coastguard Worker 30*663afb9bSAndroid Build Coastguard Worker /** 31*663afb9bSAndroid Build Coastguard Worker @mainpage 32*663afb9bSAndroid Build Coastguard Worker 33*663afb9bSAndroid Build Coastguard Worker @section intro Introduction 34*663afb9bSAndroid Build Coastguard Worker 35*663afb9bSAndroid Build Coastguard Worker Libevent is an event notification library for developing scalable network 36*663afb9bSAndroid Build Coastguard Worker servers. The Libevent API provides a mechanism to execute a callback 37*663afb9bSAndroid Build Coastguard Worker function when a specific event occurs on a file descriptor or after a 38*663afb9bSAndroid Build Coastguard Worker timeout has been reached. Furthermore, Libevent also support callbacks due 39*663afb9bSAndroid Build Coastguard Worker to signals or regular timeouts. 40*663afb9bSAndroid Build Coastguard Worker 41*663afb9bSAndroid Build Coastguard Worker Libevent is meant to replace the event loop found in event driven network 42*663afb9bSAndroid Build Coastguard Worker servers. An application just needs to call event_base_dispatch() and then add or 43*663afb9bSAndroid Build Coastguard Worker remove events dynamically without having to change the event loop. 44*663afb9bSAndroid Build Coastguard Worker 45*663afb9bSAndroid Build Coastguard Worker 46*663afb9bSAndroid Build Coastguard Worker Currently, Libevent supports /dev/poll, kqueue(2), select(2), poll(2), 47*663afb9bSAndroid Build Coastguard Worker epoll(4), and evports. The internal event mechanism is completely 48*663afb9bSAndroid Build Coastguard Worker independent of the exposed event API, and a simple update of Libevent can 49*663afb9bSAndroid Build Coastguard Worker provide new functionality without having to redesign the applications. As a 50*663afb9bSAndroid Build Coastguard Worker result, Libevent allows for portable application development and provides 51*663afb9bSAndroid Build Coastguard Worker the most scalable event notification mechanism available on an operating 52*663afb9bSAndroid Build Coastguard Worker system. Libevent can also be used for multithreaded programs. Libevent 53*663afb9bSAndroid Build Coastguard Worker should compile on Linux, *BSD, Mac OS X, Solaris and, Windows. 54*663afb9bSAndroid Build Coastguard Worker 55*663afb9bSAndroid Build Coastguard Worker @section usage Standard usage 56*663afb9bSAndroid Build Coastguard Worker 57*663afb9bSAndroid Build Coastguard Worker Every program that uses Libevent must include the <event2/event.h> 58*663afb9bSAndroid Build Coastguard Worker header, and pass the -levent flag to the linker. (You can instead link 59*663afb9bSAndroid Build Coastguard Worker -levent_core if you only want the main event and buffered IO-based code, 60*663afb9bSAndroid Build Coastguard Worker and don't want to link any protocol code.) 61*663afb9bSAndroid Build Coastguard Worker 62*663afb9bSAndroid Build Coastguard Worker @section setup Library setup 63*663afb9bSAndroid Build Coastguard Worker 64*663afb9bSAndroid Build Coastguard Worker Before you call any other Libevent functions, you need to set up the 65*663afb9bSAndroid Build Coastguard Worker library. If you're going to use Libevent from multiple threads in a 66*663afb9bSAndroid Build Coastguard Worker multithreaded application, you need to initialize thread support -- 67*663afb9bSAndroid Build Coastguard Worker typically by using evthread_use_pthreads() or 68*663afb9bSAndroid Build Coastguard Worker evthread_use_windows_threads(). See <event2/thread.h> for more 69*663afb9bSAndroid Build Coastguard Worker information. 70*663afb9bSAndroid Build Coastguard Worker 71*663afb9bSAndroid Build Coastguard Worker This is also the point where you can replace Libevent's memory 72*663afb9bSAndroid Build Coastguard Worker management functions with event_set_mem_functions, and enable debug mode 73*663afb9bSAndroid Build Coastguard Worker with event_enable_debug_mode(). 74*663afb9bSAndroid Build Coastguard Worker 75*663afb9bSAndroid Build Coastguard Worker @section base Creating an event base 76*663afb9bSAndroid Build Coastguard Worker 77*663afb9bSAndroid Build Coastguard Worker Next, you need to create an event_base structure, using event_base_new() 78*663afb9bSAndroid Build Coastguard Worker or event_base_new_with_config(). The event_base is responsible for 79*663afb9bSAndroid Build Coastguard Worker keeping track of which events are "pending" (that is to say, being 80*663afb9bSAndroid Build Coastguard Worker watched to see if they become active) and which events are "active". 81*663afb9bSAndroid Build Coastguard Worker Every event is associated with a single event_base. 82*663afb9bSAndroid Build Coastguard Worker 83*663afb9bSAndroid Build Coastguard Worker @section event Event notification 84*663afb9bSAndroid Build Coastguard Worker 85*663afb9bSAndroid Build Coastguard Worker For each file descriptor that you wish to monitor, you must create an 86*663afb9bSAndroid Build Coastguard Worker event structure with event_new(). (You may also declare an event 87*663afb9bSAndroid Build Coastguard Worker structure and call event_assign() to initialize the members of the 88*663afb9bSAndroid Build Coastguard Worker structure.) To enable notification, you add the structure to the list 89*663afb9bSAndroid Build Coastguard Worker of monitored events by calling event_add(). The event structure must 90*663afb9bSAndroid Build Coastguard Worker remain allocated as long as it is active, so it should generally be 91*663afb9bSAndroid Build Coastguard Worker allocated on the heap. 92*663afb9bSAndroid Build Coastguard Worker 93*663afb9bSAndroid Build Coastguard Worker @section loop Dispatching events. 94*663afb9bSAndroid Build Coastguard Worker 95*663afb9bSAndroid Build Coastguard Worker Finally, you call event_base_dispatch() to loop and dispatch events. 96*663afb9bSAndroid Build Coastguard Worker You can also use event_base_loop() for more fine-grained control. 97*663afb9bSAndroid Build Coastguard Worker 98*663afb9bSAndroid Build Coastguard Worker Currently, only one thread can be dispatching a given event_base at a 99*663afb9bSAndroid Build Coastguard Worker time. If you want to run events in multiple threads at once, you can 100*663afb9bSAndroid Build Coastguard Worker either have a single event_base whose events add work to a work queue, 101*663afb9bSAndroid Build Coastguard Worker or you can create multiple event_base objects. 102*663afb9bSAndroid Build Coastguard Worker 103*663afb9bSAndroid Build Coastguard Worker @section bufferevent I/O Buffers 104*663afb9bSAndroid Build Coastguard Worker 105*663afb9bSAndroid Build Coastguard Worker Libevent provides a buffered I/O abstraction on top of the regular event 106*663afb9bSAndroid Build Coastguard Worker callbacks. This abstraction is called a bufferevent. A bufferevent 107*663afb9bSAndroid Build Coastguard Worker provides input and output buffers that get filled and drained 108*663afb9bSAndroid Build Coastguard Worker automatically. The user of a buffered event no longer deals directly 109*663afb9bSAndroid Build Coastguard Worker with the I/O, but instead is reading from input and writing to output 110*663afb9bSAndroid Build Coastguard Worker buffers. 111*663afb9bSAndroid Build Coastguard Worker 112*663afb9bSAndroid Build Coastguard Worker Once initialized via bufferevent_socket_new(), the bufferevent structure 113*663afb9bSAndroid Build Coastguard Worker can be used repeatedly with bufferevent_enable() and 114*663afb9bSAndroid Build Coastguard Worker bufferevent_disable(). Instead of reading and writing directly to a 115*663afb9bSAndroid Build Coastguard Worker socket, you would call bufferevent_read() and bufferevent_write(). 116*663afb9bSAndroid Build Coastguard Worker 117*663afb9bSAndroid Build Coastguard Worker When read enabled the bufferevent will try to read from the file descriptor 118*663afb9bSAndroid Build Coastguard Worker and call the read callback. The write callback is executed whenever the 119*663afb9bSAndroid Build Coastguard Worker output buffer is drained below the write low watermark, which is 0 by 120*663afb9bSAndroid Build Coastguard Worker default. 121*663afb9bSAndroid Build Coastguard Worker 122*663afb9bSAndroid Build Coastguard Worker See <event2/bufferevent*.h> for more information. 123*663afb9bSAndroid Build Coastguard Worker 124*663afb9bSAndroid Build Coastguard Worker @section timers Timers 125*663afb9bSAndroid Build Coastguard Worker 126*663afb9bSAndroid Build Coastguard Worker Libevent can also be used to create timers that invoke a callback after a 127*663afb9bSAndroid Build Coastguard Worker certain amount of time has expired. The evtimer_new() macro returns 128*663afb9bSAndroid Build Coastguard Worker an event struct to use as a timer. To activate the timer, call 129*663afb9bSAndroid Build Coastguard Worker evtimer_add(). Timers can be deactivated by calling evtimer_del(). 130*663afb9bSAndroid Build Coastguard Worker (These macros are thin wrappers around event_new(), event_add(), 131*663afb9bSAndroid Build Coastguard Worker and event_del(); you can also use those instead.) 132*663afb9bSAndroid Build Coastguard Worker 133*663afb9bSAndroid Build Coastguard Worker @section evdns Asynchronous DNS resolution 134*663afb9bSAndroid Build Coastguard Worker 135*663afb9bSAndroid Build Coastguard Worker Libevent provides an asynchronous DNS resolver that should be used instead 136*663afb9bSAndroid Build Coastguard Worker of the standard DNS resolver functions. See the <event2/dns.h> 137*663afb9bSAndroid Build Coastguard Worker functions for more detail. 138*663afb9bSAndroid Build Coastguard Worker 139*663afb9bSAndroid Build Coastguard Worker @section evhttp Event-driven HTTP servers 140*663afb9bSAndroid Build Coastguard Worker 141*663afb9bSAndroid Build Coastguard Worker Libevent provides a very simple event-driven HTTP server that can be 142*663afb9bSAndroid Build Coastguard Worker embedded in your program and used to service HTTP requests. 143*663afb9bSAndroid Build Coastguard Worker 144*663afb9bSAndroid Build Coastguard Worker To use this capability, you need to include the <event2/http.h> header in your 145*663afb9bSAndroid Build Coastguard Worker program. See that header for more information. 146*663afb9bSAndroid Build Coastguard Worker 147*663afb9bSAndroid Build Coastguard Worker @section evrpc A framework for RPC servers and clients 148*663afb9bSAndroid Build Coastguard Worker 149*663afb9bSAndroid Build Coastguard Worker Libevent provides a framework for creating RPC servers and clients. It 150*663afb9bSAndroid Build Coastguard Worker takes care of marshaling and unmarshaling all data structures. 151*663afb9bSAndroid Build Coastguard Worker 152*663afb9bSAndroid Build Coastguard Worker @section api API Reference 153*663afb9bSAndroid Build Coastguard Worker 154*663afb9bSAndroid Build Coastguard Worker To browse the complete documentation of the libevent API, click on any of 155*663afb9bSAndroid Build Coastguard Worker the following links. 156*663afb9bSAndroid Build Coastguard Worker 157*663afb9bSAndroid Build Coastguard Worker event2/event.h 158*663afb9bSAndroid Build Coastguard Worker The primary libevent header 159*663afb9bSAndroid Build Coastguard Worker 160*663afb9bSAndroid Build Coastguard Worker event2/thread.h 161*663afb9bSAndroid Build Coastguard Worker Functions for use by multithreaded programs 162*663afb9bSAndroid Build Coastguard Worker 163*663afb9bSAndroid Build Coastguard Worker event2/buffer.h and event2/bufferevent.h 164*663afb9bSAndroid Build Coastguard Worker Buffer management for network reading and writing 165*663afb9bSAndroid Build Coastguard Worker 166*663afb9bSAndroid Build Coastguard Worker event2/util.h 167*663afb9bSAndroid Build Coastguard Worker Utility functions for portable nonblocking network code 168*663afb9bSAndroid Build Coastguard Worker 169*663afb9bSAndroid Build Coastguard Worker event2/dns.h 170*663afb9bSAndroid Build Coastguard Worker Asynchronous DNS resolution 171*663afb9bSAndroid Build Coastguard Worker 172*663afb9bSAndroid Build Coastguard Worker event2/http.h 173*663afb9bSAndroid Build Coastguard Worker An embedded libevent-based HTTP server 174*663afb9bSAndroid Build Coastguard Worker 175*663afb9bSAndroid Build Coastguard Worker event2/rpc.h 176*663afb9bSAndroid Build Coastguard Worker A framework for creating RPC servers and clients 177*663afb9bSAndroid Build Coastguard Worker 178*663afb9bSAndroid Build Coastguard Worker */ 179*663afb9bSAndroid Build Coastguard Worker 180*663afb9bSAndroid Build Coastguard Worker /** @file event2/event.h 181*663afb9bSAndroid Build Coastguard Worker 182*663afb9bSAndroid Build Coastguard Worker Core functions for waiting for and receiving events, and using event bases. 183*663afb9bSAndroid Build Coastguard Worker */ 184*663afb9bSAndroid Build Coastguard Worker 185*663afb9bSAndroid Build Coastguard Worker #include <event2/visibility.h> 186*663afb9bSAndroid Build Coastguard Worker 187*663afb9bSAndroid Build Coastguard Worker #ifdef __cplusplus 188*663afb9bSAndroid Build Coastguard Worker extern "C" { 189*663afb9bSAndroid Build Coastguard Worker #endif 190*663afb9bSAndroid Build Coastguard Worker 191*663afb9bSAndroid Build Coastguard Worker #include <event2/event-config.h> 192*663afb9bSAndroid Build Coastguard Worker #ifdef EVENT__HAVE_SYS_TYPES_H 193*663afb9bSAndroid Build Coastguard Worker #include <sys/types.h> 194*663afb9bSAndroid Build Coastguard Worker #endif 195*663afb9bSAndroid Build Coastguard Worker #ifdef EVENT__HAVE_SYS_TIME_H 196*663afb9bSAndroid Build Coastguard Worker #include <sys/time.h> 197*663afb9bSAndroid Build Coastguard Worker #endif 198*663afb9bSAndroid Build Coastguard Worker 199*663afb9bSAndroid Build Coastguard Worker #include <stdio.h> 200*663afb9bSAndroid Build Coastguard Worker 201*663afb9bSAndroid Build Coastguard Worker /* For int types. */ 202*663afb9bSAndroid Build Coastguard Worker #include <event2/util.h> 203*663afb9bSAndroid Build Coastguard Worker 204*663afb9bSAndroid Build Coastguard Worker /** 205*663afb9bSAndroid Build Coastguard Worker * Structure to hold information and state for a Libevent dispatch loop. 206*663afb9bSAndroid Build Coastguard Worker * 207*663afb9bSAndroid Build Coastguard Worker * The event_base lies at the center of Libevent; every application will 208*663afb9bSAndroid Build Coastguard Worker * have one. It keeps track of all pending and active events, and 209*663afb9bSAndroid Build Coastguard Worker * notifies your application of the active ones. 210*663afb9bSAndroid Build Coastguard Worker * 211*663afb9bSAndroid Build Coastguard Worker * This is an opaque structure; you can allocate one using 212*663afb9bSAndroid Build Coastguard Worker * event_base_new() or event_base_new_with_config(). 213*663afb9bSAndroid Build Coastguard Worker * 214*663afb9bSAndroid Build Coastguard Worker * @see event_base_new(), event_base_free(), event_base_loop(), 215*663afb9bSAndroid Build Coastguard Worker * event_base_new_with_config() 216*663afb9bSAndroid Build Coastguard Worker */ 217*663afb9bSAndroid Build Coastguard Worker struct event_base 218*663afb9bSAndroid Build Coastguard Worker #ifdef EVENT_IN_DOXYGEN_ 219*663afb9bSAndroid Build Coastguard Worker {/*Empty body so that doxygen will generate documentation here.*/} 220*663afb9bSAndroid Build Coastguard Worker #endif 221*663afb9bSAndroid Build Coastguard Worker ; 222*663afb9bSAndroid Build Coastguard Worker 223*663afb9bSAndroid Build Coastguard Worker /** 224*663afb9bSAndroid Build Coastguard Worker * @struct event 225*663afb9bSAndroid Build Coastguard Worker * 226*663afb9bSAndroid Build Coastguard Worker * Structure to represent a single event. 227*663afb9bSAndroid Build Coastguard Worker * 228*663afb9bSAndroid Build Coastguard Worker * An event can have some underlying condition it represents: a socket 229*663afb9bSAndroid Build Coastguard Worker * becoming readable or writeable (or both), or a signal becoming raised. 230*663afb9bSAndroid Build Coastguard Worker * (An event that represents no underlying condition is still useful: you 231*663afb9bSAndroid Build Coastguard Worker * can use one to implement a timer, or to communicate between threads.) 232*663afb9bSAndroid Build Coastguard Worker * 233*663afb9bSAndroid Build Coastguard Worker * Generally, you can create events with event_new(), then make them 234*663afb9bSAndroid Build Coastguard Worker * pending with event_add(). As your event_base runs, it will run the 235*663afb9bSAndroid Build Coastguard Worker * callbacks of an events whose conditions are triggered. When you no 236*663afb9bSAndroid Build Coastguard Worker * longer want the event, free it with event_free(). 237*663afb9bSAndroid Build Coastguard Worker * 238*663afb9bSAndroid Build Coastguard Worker * In more depth: 239*663afb9bSAndroid Build Coastguard Worker * 240*663afb9bSAndroid Build Coastguard Worker * An event may be "pending" (one whose condition we are watching), 241*663afb9bSAndroid Build Coastguard Worker * "active" (one whose condition has triggered and whose callback is about 242*663afb9bSAndroid Build Coastguard Worker * to run), neither, or both. Events come into existence via 243*663afb9bSAndroid Build Coastguard Worker * event_assign() or event_new(), and are then neither active nor pending. 244*663afb9bSAndroid Build Coastguard Worker * 245*663afb9bSAndroid Build Coastguard Worker * To make an event pending, pass it to event_add(). When doing so, you 246*663afb9bSAndroid Build Coastguard Worker * can also set a timeout for the event. 247*663afb9bSAndroid Build Coastguard Worker * 248*663afb9bSAndroid Build Coastguard Worker * Events become active during an event_base_loop() call when either their 249*663afb9bSAndroid Build Coastguard Worker * condition has triggered, or when their timeout has elapsed. You can 250*663afb9bSAndroid Build Coastguard Worker * also activate an event manually using event_active(). The even_base 251*663afb9bSAndroid Build Coastguard Worker * loop will run the callbacks of active events; after it has done so, it 252*663afb9bSAndroid Build Coastguard Worker * marks them as no longer active. 253*663afb9bSAndroid Build Coastguard Worker * 254*663afb9bSAndroid Build Coastguard Worker * You can make an event non-pending by passing it to event_del(). This 255*663afb9bSAndroid Build Coastguard Worker * also makes the event non-active. 256*663afb9bSAndroid Build Coastguard Worker * 257*663afb9bSAndroid Build Coastguard Worker * Events can be "persistent" or "non-persistent". A non-persistent event 258*663afb9bSAndroid Build Coastguard Worker * becomes non-pending as soon as it is triggered: thus, it only runs at 259*663afb9bSAndroid Build Coastguard Worker * most once per call to event_add(). A persistent event remains pending 260*663afb9bSAndroid Build Coastguard Worker * even when it becomes active: you'll need to event_del() it manually in 261*663afb9bSAndroid Build Coastguard Worker * order to make it non-pending. When a persistent event with a timeout 262*663afb9bSAndroid Build Coastguard Worker * becomes active, its timeout is reset: this means you can use persistent 263*663afb9bSAndroid Build Coastguard Worker * events to implement periodic timeouts. 264*663afb9bSAndroid Build Coastguard Worker * 265*663afb9bSAndroid Build Coastguard Worker * This should be treated as an opaque structure; you should never read or 266*663afb9bSAndroid Build Coastguard Worker * write any of its fields directly. For backward compatibility with old 267*663afb9bSAndroid Build Coastguard Worker * code, it is defined in the event2/event_struct.h header; including this 268*663afb9bSAndroid Build Coastguard Worker * header may make your code incompatible with other versions of Libevent. 269*663afb9bSAndroid Build Coastguard Worker * 270*663afb9bSAndroid Build Coastguard Worker * @see event_new(), event_free(), event_assign(), event_get_assignment(), 271*663afb9bSAndroid Build Coastguard Worker * event_add(), event_del(), event_active(), event_pending(), 272*663afb9bSAndroid Build Coastguard Worker * event_get_fd(), event_get_base(), event_get_events(), 273*663afb9bSAndroid Build Coastguard Worker * event_get_callback(), event_get_callback_arg(), 274*663afb9bSAndroid Build Coastguard Worker * event_priority_set() 275*663afb9bSAndroid Build Coastguard Worker */ 276*663afb9bSAndroid Build Coastguard Worker struct event 277*663afb9bSAndroid Build Coastguard Worker #ifdef EVENT_IN_DOXYGEN_ 278*663afb9bSAndroid Build Coastguard Worker {/*Empty body so that doxygen will generate documentation here.*/} 279*663afb9bSAndroid Build Coastguard Worker #endif 280*663afb9bSAndroid Build Coastguard Worker ; 281*663afb9bSAndroid Build Coastguard Worker 282*663afb9bSAndroid Build Coastguard Worker /** 283*663afb9bSAndroid Build Coastguard Worker * Configuration for an event_base. 284*663afb9bSAndroid Build Coastguard Worker * 285*663afb9bSAndroid Build Coastguard Worker * There are many options that can be used to alter the behavior and 286*663afb9bSAndroid Build Coastguard Worker * implementation of an event_base. To avoid having to pass them all in a 287*663afb9bSAndroid Build Coastguard Worker * complex many-argument constructor, we provide an abstract data type 288*663afb9bSAndroid Build Coastguard Worker * where you set up configuration information before passing it to 289*663afb9bSAndroid Build Coastguard Worker * event_base_new_with_config(). 290*663afb9bSAndroid Build Coastguard Worker * 291*663afb9bSAndroid Build Coastguard Worker * @see event_config_new(), event_config_free(), event_base_new_with_config(), 292*663afb9bSAndroid Build Coastguard Worker * event_config_avoid_method(), event_config_require_features(), 293*663afb9bSAndroid Build Coastguard Worker * event_config_set_flag(), event_config_set_num_cpus_hint() 294*663afb9bSAndroid Build Coastguard Worker */ 295*663afb9bSAndroid Build Coastguard Worker struct event_config 296*663afb9bSAndroid Build Coastguard Worker #ifdef EVENT_IN_DOXYGEN_ 297*663afb9bSAndroid Build Coastguard Worker {/*Empty body so that doxygen will generate documentation here.*/} 298*663afb9bSAndroid Build Coastguard Worker #endif 299*663afb9bSAndroid Build Coastguard Worker ; 300*663afb9bSAndroid Build Coastguard Worker 301*663afb9bSAndroid Build Coastguard Worker /** 302*663afb9bSAndroid Build Coastguard Worker * Enable some relatively expensive debugging checks in Libevent that 303*663afb9bSAndroid Build Coastguard Worker * would normally be turned off. Generally, these checks cause code that 304*663afb9bSAndroid Build Coastguard Worker * would otherwise crash mysteriously to fail earlier with an assertion 305*663afb9bSAndroid Build Coastguard Worker * failure. Note that this method MUST be called before any events or 306*663afb9bSAndroid Build Coastguard Worker * event_bases have been created. 307*663afb9bSAndroid Build Coastguard Worker * 308*663afb9bSAndroid Build Coastguard Worker * Debug mode can currently catch the following errors: 309*663afb9bSAndroid Build Coastguard Worker * An event is re-assigned while it is added 310*663afb9bSAndroid Build Coastguard Worker * Any function is called on a non-assigned event 311*663afb9bSAndroid Build Coastguard Worker * 312*663afb9bSAndroid Build Coastguard Worker * Note that debugging mode uses memory to track every event that has been 313*663afb9bSAndroid Build Coastguard Worker * initialized (via event_assign, event_set, or event_new) but not yet 314*663afb9bSAndroid Build Coastguard Worker * released (via event_free or event_debug_unassign). If you want to use 315*663afb9bSAndroid Build Coastguard Worker * debug mode, and you find yourself running out of memory, you will need 316*663afb9bSAndroid Build Coastguard Worker * to use event_debug_unassign to explicitly stop tracking events that 317*663afb9bSAndroid Build Coastguard Worker * are no longer considered set-up. 318*663afb9bSAndroid Build Coastguard Worker * 319*663afb9bSAndroid Build Coastguard Worker * @see event_debug_unassign() 320*663afb9bSAndroid Build Coastguard Worker */ 321*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 322*663afb9bSAndroid Build Coastguard Worker void event_enable_debug_mode(void); 323*663afb9bSAndroid Build Coastguard Worker 324*663afb9bSAndroid Build Coastguard Worker /** 325*663afb9bSAndroid Build Coastguard Worker * When debugging mode is enabled, informs Libevent that an event should no 326*663afb9bSAndroid Build Coastguard Worker * longer be considered as assigned. When debugging mode is not enabled, does 327*663afb9bSAndroid Build Coastguard Worker * nothing. 328*663afb9bSAndroid Build Coastguard Worker * 329*663afb9bSAndroid Build Coastguard Worker * This function must only be called on a non-added event. 330*663afb9bSAndroid Build Coastguard Worker * 331*663afb9bSAndroid Build Coastguard Worker * @see event_enable_debug_mode() 332*663afb9bSAndroid Build Coastguard Worker */ 333*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 334*663afb9bSAndroid Build Coastguard Worker void event_debug_unassign(struct event *); 335*663afb9bSAndroid Build Coastguard Worker 336*663afb9bSAndroid Build Coastguard Worker /** 337*663afb9bSAndroid Build Coastguard Worker * Create and return a new event_base to use with the rest of Libevent. 338*663afb9bSAndroid Build Coastguard Worker * 339*663afb9bSAndroid Build Coastguard Worker * @return a new event_base on success, or NULL on failure. 340*663afb9bSAndroid Build Coastguard Worker * 341*663afb9bSAndroid Build Coastguard Worker * @see event_base_free(), event_base_new_with_config() 342*663afb9bSAndroid Build Coastguard Worker */ 343*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 344*663afb9bSAndroid Build Coastguard Worker struct event_base *event_base_new(void); 345*663afb9bSAndroid Build Coastguard Worker 346*663afb9bSAndroid Build Coastguard Worker /** 347*663afb9bSAndroid Build Coastguard Worker Reinitialize the event base after a fork 348*663afb9bSAndroid Build Coastguard Worker 349*663afb9bSAndroid Build Coastguard Worker Some event mechanisms do not survive across fork. The event base needs 350*663afb9bSAndroid Build Coastguard Worker to be reinitialized with the event_reinit() function. 351*663afb9bSAndroid Build Coastguard Worker 352*663afb9bSAndroid Build Coastguard Worker @param base the event base that needs to be re-initialized 353*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if some events could not be re-added. 354*663afb9bSAndroid Build Coastguard Worker @see event_base_new() 355*663afb9bSAndroid Build Coastguard Worker */ 356*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 357*663afb9bSAndroid Build Coastguard Worker int event_reinit(struct event_base *base); 358*663afb9bSAndroid Build Coastguard Worker 359*663afb9bSAndroid Build Coastguard Worker /** 360*663afb9bSAndroid Build Coastguard Worker Event dispatching loop 361*663afb9bSAndroid Build Coastguard Worker 362*663afb9bSAndroid Build Coastguard Worker This loop will run the event base until either there are no more pending or 363*663afb9bSAndroid Build Coastguard Worker active, or until something calls event_base_loopbreak() or 364*663afb9bSAndroid Build Coastguard Worker event_base_loopexit(). 365*663afb9bSAndroid Build Coastguard Worker 366*663afb9bSAndroid Build Coastguard Worker @param base the event_base structure returned by event_base_new() or 367*663afb9bSAndroid Build Coastguard Worker event_base_new_with_config() 368*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, -1 if an error occurred, or 1 if we exited because 369*663afb9bSAndroid Build Coastguard Worker no events were pending or active. 370*663afb9bSAndroid Build Coastguard Worker @see event_base_loop() 371*663afb9bSAndroid Build Coastguard Worker */ 372*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 373*663afb9bSAndroid Build Coastguard Worker int event_base_dispatch(struct event_base *); 374*663afb9bSAndroid Build Coastguard Worker 375*663afb9bSAndroid Build Coastguard Worker /** 376*663afb9bSAndroid Build Coastguard Worker Get the kernel event notification mechanism used by Libevent. 377*663afb9bSAndroid Build Coastguard Worker 378*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_base_new() 379*663afb9bSAndroid Build Coastguard Worker @return a string identifying the kernel event mechanism (kqueue, epoll, etc.) 380*663afb9bSAndroid Build Coastguard Worker */ 381*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 382*663afb9bSAndroid Build Coastguard Worker const char *event_base_get_method(const struct event_base *); 383*663afb9bSAndroid Build Coastguard Worker 384*663afb9bSAndroid Build Coastguard Worker /** 385*663afb9bSAndroid Build Coastguard Worker Gets all event notification mechanisms supported by Libevent. 386*663afb9bSAndroid Build Coastguard Worker 387*663afb9bSAndroid Build Coastguard Worker This functions returns the event mechanism in order preferred by 388*663afb9bSAndroid Build Coastguard Worker Libevent. Note that this list will include all backends that 389*663afb9bSAndroid Build Coastguard Worker Libevent has compiled-in support for, and will not necessarily check 390*663afb9bSAndroid Build Coastguard Worker your OS to see whether it has the required resources. 391*663afb9bSAndroid Build Coastguard Worker 392*663afb9bSAndroid Build Coastguard Worker @return an array with pointers to the names of support methods. 393*663afb9bSAndroid Build Coastguard Worker The end of the array is indicated by a NULL pointer. If an 394*663afb9bSAndroid Build Coastguard Worker error is encountered NULL is returned. 395*663afb9bSAndroid Build Coastguard Worker */ 396*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 397*663afb9bSAndroid Build Coastguard Worker const char **event_get_supported_methods(void); 398*663afb9bSAndroid Build Coastguard Worker 399*663afb9bSAndroid Build Coastguard Worker /** Query the current monotonic time from a the timer for a struct 400*663afb9bSAndroid Build Coastguard Worker * event_base. 401*663afb9bSAndroid Build Coastguard Worker */ 402*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 403*663afb9bSAndroid Build Coastguard Worker int event_gettime_monotonic(struct event_base *base, struct timeval *tp); 404*663afb9bSAndroid Build Coastguard Worker 405*663afb9bSAndroid Build Coastguard Worker /** 406*663afb9bSAndroid Build Coastguard Worker @name event type flag 407*663afb9bSAndroid Build Coastguard Worker 408*663afb9bSAndroid Build Coastguard Worker Flags to pass to event_base_get_num_events() to specify the kinds of events 409*663afb9bSAndroid Build Coastguard Worker we want to aggregate counts for 410*663afb9bSAndroid Build Coastguard Worker */ 411*663afb9bSAndroid Build Coastguard Worker /**@{*/ 412*663afb9bSAndroid Build Coastguard Worker /** count the number of active events, which have been triggered.*/ 413*663afb9bSAndroid Build Coastguard Worker #define EVENT_BASE_COUNT_ACTIVE 1U 414*663afb9bSAndroid Build Coastguard Worker /** count the number of virtual events, which is used to represent an internal 415*663afb9bSAndroid Build Coastguard Worker * condition, other than a pending event, that keeps the loop from exiting. */ 416*663afb9bSAndroid Build Coastguard Worker #define EVENT_BASE_COUNT_VIRTUAL 2U 417*663afb9bSAndroid Build Coastguard Worker /** count the number of events which have been added to event base, including 418*663afb9bSAndroid Build Coastguard Worker * internal events. */ 419*663afb9bSAndroid Build Coastguard Worker #define EVENT_BASE_COUNT_ADDED 4U 420*663afb9bSAndroid Build Coastguard Worker /**@}*/ 421*663afb9bSAndroid Build Coastguard Worker 422*663afb9bSAndroid Build Coastguard Worker /** 423*663afb9bSAndroid Build Coastguard Worker Gets the number of events in event_base, as specified in the flags. 424*663afb9bSAndroid Build Coastguard Worker 425*663afb9bSAndroid Build Coastguard Worker Since event base has some internal events added to make some of its 426*663afb9bSAndroid Build Coastguard Worker functionalities work, EVENT_BASE_COUNT_ADDED may return more than the 427*663afb9bSAndroid Build Coastguard Worker number of events you added using event_add(). 428*663afb9bSAndroid Build Coastguard Worker 429*663afb9bSAndroid Build Coastguard Worker If you pass EVENT_BASE_COUNT_ACTIVE and EVENT_BASE_COUNT_ADDED together, an 430*663afb9bSAndroid Build Coastguard Worker active event will be counted twice. However, this might not be the case in 431*663afb9bSAndroid Build Coastguard Worker future libevent versions. The return value is an indication of the work 432*663afb9bSAndroid Build Coastguard Worker load, but the user shouldn't rely on the exact value as this may change in 433*663afb9bSAndroid Build Coastguard Worker the future. 434*663afb9bSAndroid Build Coastguard Worker 435*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_base_new() 436*663afb9bSAndroid Build Coastguard Worker @param flags a bitwise combination of the kinds of events to aggregate 437*663afb9bSAndroid Build Coastguard Worker counts for 438*663afb9bSAndroid Build Coastguard Worker @return the number of events specified in the flags 439*663afb9bSAndroid Build Coastguard Worker */ 440*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 441*663afb9bSAndroid Build Coastguard Worker int event_base_get_num_events(struct event_base *, unsigned int); 442*663afb9bSAndroid Build Coastguard Worker 443*663afb9bSAndroid Build Coastguard Worker /** 444*663afb9bSAndroid Build Coastguard Worker Get the maximum number of events in a given event_base as specified in the 445*663afb9bSAndroid Build Coastguard Worker flags. 446*663afb9bSAndroid Build Coastguard Worker 447*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_base_new() 448*663afb9bSAndroid Build Coastguard Worker @param flags a bitwise combination of the kinds of events to aggregate 449*663afb9bSAndroid Build Coastguard Worker counts for 450*663afb9bSAndroid Build Coastguard Worker @param clear option used to reset the maximum count. 451*663afb9bSAndroid Build Coastguard Worker @return the number of events specified in the flags 452*663afb9bSAndroid Build Coastguard Worker */ 453*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 454*663afb9bSAndroid Build Coastguard Worker int event_base_get_max_events(struct event_base *, unsigned int, int); 455*663afb9bSAndroid Build Coastguard Worker 456*663afb9bSAndroid Build Coastguard Worker /** 457*663afb9bSAndroid Build Coastguard Worker Allocates a new event configuration object. 458*663afb9bSAndroid Build Coastguard Worker 459*663afb9bSAndroid Build Coastguard Worker The event configuration object can be used to change the behavior of 460*663afb9bSAndroid Build Coastguard Worker an event base. 461*663afb9bSAndroid Build Coastguard Worker 462*663afb9bSAndroid Build Coastguard Worker @return an event_config object that can be used to store configuration, or 463*663afb9bSAndroid Build Coastguard Worker NULL if an error is encountered. 464*663afb9bSAndroid Build Coastguard Worker @see event_base_new_with_config(), event_config_free(), event_config 465*663afb9bSAndroid Build Coastguard Worker */ 466*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 467*663afb9bSAndroid Build Coastguard Worker struct event_config *event_config_new(void); 468*663afb9bSAndroid Build Coastguard Worker 469*663afb9bSAndroid Build Coastguard Worker /** 470*663afb9bSAndroid Build Coastguard Worker Deallocates all memory associated with an event configuration object 471*663afb9bSAndroid Build Coastguard Worker 472*663afb9bSAndroid Build Coastguard Worker @param cfg the event configuration object to be freed. 473*663afb9bSAndroid Build Coastguard Worker */ 474*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 475*663afb9bSAndroid Build Coastguard Worker void event_config_free(struct event_config *cfg); 476*663afb9bSAndroid Build Coastguard Worker 477*663afb9bSAndroid Build Coastguard Worker /** 478*663afb9bSAndroid Build Coastguard Worker Enters an event method that should be avoided into the configuration. 479*663afb9bSAndroid Build Coastguard Worker 480*663afb9bSAndroid Build Coastguard Worker This can be used to avoid event mechanisms that do not support certain 481*663afb9bSAndroid Build Coastguard Worker file descriptor types, or for debugging to avoid certain event 482*663afb9bSAndroid Build Coastguard Worker mechanisms. An application can make use of multiple event bases to 483*663afb9bSAndroid Build Coastguard Worker accommodate incompatible file descriptor types. 484*663afb9bSAndroid Build Coastguard Worker 485*663afb9bSAndroid Build Coastguard Worker @param cfg the event configuration object 486*663afb9bSAndroid Build Coastguard Worker @param method the name of the event method to avoid 487*663afb9bSAndroid Build Coastguard Worker @return 0 on success, -1 on failure. 488*663afb9bSAndroid Build Coastguard Worker */ 489*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 490*663afb9bSAndroid Build Coastguard Worker int event_config_avoid_method(struct event_config *cfg, const char *method); 491*663afb9bSAndroid Build Coastguard Worker 492*663afb9bSAndroid Build Coastguard Worker /** 493*663afb9bSAndroid Build Coastguard Worker A flag used to describe which features an event_base (must) provide. 494*663afb9bSAndroid Build Coastguard Worker 495*663afb9bSAndroid Build Coastguard Worker Because of OS limitations, not every Libevent backend supports every 496*663afb9bSAndroid Build Coastguard Worker possible feature. You can use this type with 497*663afb9bSAndroid Build Coastguard Worker event_config_require_features() to tell Libevent to only proceed if your 498*663afb9bSAndroid Build Coastguard Worker event_base implements a given feature, and you can receive this type from 499*663afb9bSAndroid Build Coastguard Worker event_base_get_features() to see which features are available. 500*663afb9bSAndroid Build Coastguard Worker */ 501*663afb9bSAndroid Build Coastguard Worker enum event_method_feature { 502*663afb9bSAndroid Build Coastguard Worker /** Require an event method that allows edge-triggered events with EV_ET. */ 503*663afb9bSAndroid Build Coastguard Worker EV_FEATURE_ET = 0x01, 504*663afb9bSAndroid Build Coastguard Worker /** Require an event method where having one event triggered among 505*663afb9bSAndroid Build Coastguard Worker * many is [approximately] an O(1) operation. This excludes (for 506*663afb9bSAndroid Build Coastguard Worker * example) select and poll, which are approximately O(N) for N 507*663afb9bSAndroid Build Coastguard Worker * equal to the total number of possible events. */ 508*663afb9bSAndroid Build Coastguard Worker EV_FEATURE_O1 = 0x02, 509*663afb9bSAndroid Build Coastguard Worker /** Require an event method that allows file descriptors as well as 510*663afb9bSAndroid Build Coastguard Worker * sockets. */ 511*663afb9bSAndroid Build Coastguard Worker EV_FEATURE_FDS = 0x04, 512*663afb9bSAndroid Build Coastguard Worker /** Require an event method that allows you to use EV_CLOSED to detect 513*663afb9bSAndroid Build Coastguard Worker * connection close without the necessity of reading all the pending data. 514*663afb9bSAndroid Build Coastguard Worker * 515*663afb9bSAndroid Build Coastguard Worker * Methods that do support EV_CLOSED may not be able to provide support on 516*663afb9bSAndroid Build Coastguard Worker * all kernel versions. 517*663afb9bSAndroid Build Coastguard Worker **/ 518*663afb9bSAndroid Build Coastguard Worker EV_FEATURE_EARLY_CLOSE = 0x08 519*663afb9bSAndroid Build Coastguard Worker }; 520*663afb9bSAndroid Build Coastguard Worker 521*663afb9bSAndroid Build Coastguard Worker /** 522*663afb9bSAndroid Build Coastguard Worker A flag passed to event_config_set_flag(). 523*663afb9bSAndroid Build Coastguard Worker 524*663afb9bSAndroid Build Coastguard Worker These flags change the behavior of an allocated event_base. 525*663afb9bSAndroid Build Coastguard Worker 526*663afb9bSAndroid Build Coastguard Worker @see event_config_set_flag(), event_base_new_with_config(), 527*663afb9bSAndroid Build Coastguard Worker event_method_feature 528*663afb9bSAndroid Build Coastguard Worker */ 529*663afb9bSAndroid Build Coastguard Worker enum event_base_config_flag { 530*663afb9bSAndroid Build Coastguard Worker /** Do not allocate a lock for the event base, even if we have 531*663afb9bSAndroid Build Coastguard Worker locking set up. 532*663afb9bSAndroid Build Coastguard Worker 533*663afb9bSAndroid Build Coastguard Worker Setting this option will make it unsafe and nonfunctional to call 534*663afb9bSAndroid Build Coastguard Worker functions on the base concurrently from multiple threads. 535*663afb9bSAndroid Build Coastguard Worker */ 536*663afb9bSAndroid Build Coastguard Worker EVENT_BASE_FLAG_NOLOCK = 0x01, 537*663afb9bSAndroid Build Coastguard Worker /** Do not check the EVENT_* environment variables when configuring 538*663afb9bSAndroid Build Coastguard Worker an event_base */ 539*663afb9bSAndroid Build Coastguard Worker EVENT_BASE_FLAG_IGNORE_ENV = 0x02, 540*663afb9bSAndroid Build Coastguard Worker /** Windows only: enable the IOCP dispatcher at startup 541*663afb9bSAndroid Build Coastguard Worker 542*663afb9bSAndroid Build Coastguard Worker If this flag is set then bufferevent_socket_new() and 543*663afb9bSAndroid Build Coastguard Worker evconn_listener_new() will use IOCP-backed implementations 544*663afb9bSAndroid Build Coastguard Worker instead of the usual select-based one on Windows. 545*663afb9bSAndroid Build Coastguard Worker */ 546*663afb9bSAndroid Build Coastguard Worker EVENT_BASE_FLAG_STARTUP_IOCP = 0x04, 547*663afb9bSAndroid Build Coastguard Worker /** Instead of checking the current time every time the event loop is 548*663afb9bSAndroid Build Coastguard Worker ready to run timeout callbacks, check after each timeout callback. 549*663afb9bSAndroid Build Coastguard Worker */ 550*663afb9bSAndroid Build Coastguard Worker EVENT_BASE_FLAG_NO_CACHE_TIME = 0x08, 551*663afb9bSAndroid Build Coastguard Worker 552*663afb9bSAndroid Build Coastguard Worker /** If we are using the epoll backend, this flag says that it is 553*663afb9bSAndroid Build Coastguard Worker safe to use Libevent's internal change-list code to batch up 554*663afb9bSAndroid Build Coastguard Worker adds and deletes in order to try to do as few syscalls as 555*663afb9bSAndroid Build Coastguard Worker possible. Setting this flag can make your code run faster, but 556*663afb9bSAndroid Build Coastguard Worker it may trigger a Linux bug: it is not safe to use this flag 557*663afb9bSAndroid Build Coastguard Worker if you have any fds cloned by dup() or its variants. Doing so 558*663afb9bSAndroid Build Coastguard Worker will produce strange and hard-to-diagnose bugs. 559*663afb9bSAndroid Build Coastguard Worker 560*663afb9bSAndroid Build Coastguard Worker This flag can also be activated by setting the 561*663afb9bSAndroid Build Coastguard Worker EVENT_EPOLL_USE_CHANGELIST environment variable. 562*663afb9bSAndroid Build Coastguard Worker 563*663afb9bSAndroid Build Coastguard Worker This flag has no effect if you wind up using a backend other than 564*663afb9bSAndroid Build Coastguard Worker epoll. 565*663afb9bSAndroid Build Coastguard Worker */ 566*663afb9bSAndroid Build Coastguard Worker EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST = 0x10, 567*663afb9bSAndroid Build Coastguard Worker 568*663afb9bSAndroid Build Coastguard Worker /** Ordinarily, Libevent implements its time and timeout code using 569*663afb9bSAndroid Build Coastguard Worker the fastest monotonic timer that we have. If this flag is set, 570*663afb9bSAndroid Build Coastguard Worker however, we use less efficient more precise timer, assuming one is 571*663afb9bSAndroid Build Coastguard Worker present. 572*663afb9bSAndroid Build Coastguard Worker */ 573*663afb9bSAndroid Build Coastguard Worker EVENT_BASE_FLAG_PRECISE_TIMER = 0x20 574*663afb9bSAndroid Build Coastguard Worker }; 575*663afb9bSAndroid Build Coastguard Worker 576*663afb9bSAndroid Build Coastguard Worker /** 577*663afb9bSAndroid Build Coastguard Worker Return a bitmask of the features implemented by an event base. This 578*663afb9bSAndroid Build Coastguard Worker will be a bitwise OR of one or more of the values of 579*663afb9bSAndroid Build Coastguard Worker event_method_feature 580*663afb9bSAndroid Build Coastguard Worker 581*663afb9bSAndroid Build Coastguard Worker @see event_method_feature 582*663afb9bSAndroid Build Coastguard Worker */ 583*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 584*663afb9bSAndroid Build Coastguard Worker int event_base_get_features(const struct event_base *base); 585*663afb9bSAndroid Build Coastguard Worker 586*663afb9bSAndroid Build Coastguard Worker /** 587*663afb9bSAndroid Build Coastguard Worker Enters a required event method feature that the application demands. 588*663afb9bSAndroid Build Coastguard Worker 589*663afb9bSAndroid Build Coastguard Worker Note that not every feature or combination of features is supported 590*663afb9bSAndroid Build Coastguard Worker on every platform. Code that requests features should be prepared 591*663afb9bSAndroid Build Coastguard Worker to handle the case where event_base_new_with_config() returns NULL, as in: 592*663afb9bSAndroid Build Coastguard Worker <pre> 593*663afb9bSAndroid Build Coastguard Worker event_config_require_features(cfg, EV_FEATURE_ET); 594*663afb9bSAndroid Build Coastguard Worker base = event_base_new_with_config(cfg); 595*663afb9bSAndroid Build Coastguard Worker if (base == NULL) { 596*663afb9bSAndroid Build Coastguard Worker // We can't get edge-triggered behavior here. 597*663afb9bSAndroid Build Coastguard Worker event_config_require_features(cfg, 0); 598*663afb9bSAndroid Build Coastguard Worker base = event_base_new_with_config(cfg); 599*663afb9bSAndroid Build Coastguard Worker } 600*663afb9bSAndroid Build Coastguard Worker </pre> 601*663afb9bSAndroid Build Coastguard Worker 602*663afb9bSAndroid Build Coastguard Worker @param cfg the event configuration object 603*663afb9bSAndroid Build Coastguard Worker @param feature a bitfield of one or more event_method_feature values. 604*663afb9bSAndroid Build Coastguard Worker Replaces values from previous calls to this function. 605*663afb9bSAndroid Build Coastguard Worker @return 0 on success, -1 on failure. 606*663afb9bSAndroid Build Coastguard Worker @see event_method_feature, event_base_new_with_config() 607*663afb9bSAndroid Build Coastguard Worker */ 608*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 609*663afb9bSAndroid Build Coastguard Worker int event_config_require_features(struct event_config *cfg, int feature); 610*663afb9bSAndroid Build Coastguard Worker 611*663afb9bSAndroid Build Coastguard Worker /** 612*663afb9bSAndroid Build Coastguard Worker * Sets one or more flags to configure what parts of the eventual event_base 613*663afb9bSAndroid Build Coastguard Worker * will be initialized, and how they'll work. 614*663afb9bSAndroid Build Coastguard Worker * 615*663afb9bSAndroid Build Coastguard Worker * @see event_base_config_flags, event_base_new_with_config() 616*663afb9bSAndroid Build Coastguard Worker **/ 617*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 618*663afb9bSAndroid Build Coastguard Worker int event_config_set_flag(struct event_config *cfg, int flag); 619*663afb9bSAndroid Build Coastguard Worker 620*663afb9bSAndroid Build Coastguard Worker /** 621*663afb9bSAndroid Build Coastguard Worker * Records a hint for the number of CPUs in the system. This is used for 622*663afb9bSAndroid Build Coastguard Worker * tuning thread pools, etc, for optimal performance. In Libevent 2.0, 623*663afb9bSAndroid Build Coastguard Worker * it is only on Windows, and only when IOCP is in use. 624*663afb9bSAndroid Build Coastguard Worker * 625*663afb9bSAndroid Build Coastguard Worker * @param cfg the event configuration object 626*663afb9bSAndroid Build Coastguard Worker * @param cpus the number of cpus 627*663afb9bSAndroid Build Coastguard Worker * @return 0 on success, -1 on failure. 628*663afb9bSAndroid Build Coastguard Worker */ 629*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 630*663afb9bSAndroid Build Coastguard Worker int event_config_set_num_cpus_hint(struct event_config *cfg, int cpus); 631*663afb9bSAndroid Build Coastguard Worker 632*663afb9bSAndroid Build Coastguard Worker /** 633*663afb9bSAndroid Build Coastguard Worker * Record an interval and/or a number of callbacks after which the event base 634*663afb9bSAndroid Build Coastguard Worker * should check for new events. By default, the event base will run as many 635*663afb9bSAndroid Build Coastguard Worker * events are as activated at the highest activated priority before checking 636*663afb9bSAndroid Build Coastguard Worker * for new events. If you configure it by setting max_interval, it will check 637*663afb9bSAndroid Build Coastguard Worker * the time after each callback, and not allow more than max_interval to 638*663afb9bSAndroid Build Coastguard Worker * elapse before checking for new events. If you configure it by setting 639*663afb9bSAndroid Build Coastguard Worker * max_callbacks to a value >= 0, it will run no more than max_callbacks 640*663afb9bSAndroid Build Coastguard Worker * callbacks before checking for new events. 641*663afb9bSAndroid Build Coastguard Worker * 642*663afb9bSAndroid Build Coastguard Worker * This option can decrease the latency of high-priority events, and 643*663afb9bSAndroid Build Coastguard Worker * avoid priority inversions where multiple low-priority events keep us from 644*663afb9bSAndroid Build Coastguard Worker * polling for high-priority events, but at the expense of slightly decreasing 645*663afb9bSAndroid Build Coastguard Worker * the throughput. Use it with caution! 646*663afb9bSAndroid Build Coastguard Worker * 647*663afb9bSAndroid Build Coastguard Worker * @param cfg The event_base configuration object. 648*663afb9bSAndroid Build Coastguard Worker * @param max_interval An interval after which Libevent should stop running 649*663afb9bSAndroid Build Coastguard Worker * callbacks and check for more events, or NULL if there should be 650*663afb9bSAndroid Build Coastguard Worker * no such interval. 651*663afb9bSAndroid Build Coastguard Worker * @param max_callbacks A number of callbacks after which Libevent should 652*663afb9bSAndroid Build Coastguard Worker * stop running callbacks and check for more events, or -1 if there 653*663afb9bSAndroid Build Coastguard Worker * should be no such limit. 654*663afb9bSAndroid Build Coastguard Worker * @param min_priority A priority below which max_interval and max_callbacks 655*663afb9bSAndroid Build Coastguard Worker * should not be enforced. If this is set to 0, they are enforced 656*663afb9bSAndroid Build Coastguard Worker * for events of every priority; if it's set to 1, they're enforced 657*663afb9bSAndroid Build Coastguard Worker * for events of priority 1 and above, and so on. 658*663afb9bSAndroid Build Coastguard Worker * @return 0 on success, -1 on failure. 659*663afb9bSAndroid Build Coastguard Worker **/ 660*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 661*663afb9bSAndroid Build Coastguard Worker int event_config_set_max_dispatch_interval(struct event_config *cfg, 662*663afb9bSAndroid Build Coastguard Worker const struct timeval *max_interval, int max_callbacks, 663*663afb9bSAndroid Build Coastguard Worker int min_priority); 664*663afb9bSAndroid Build Coastguard Worker 665*663afb9bSAndroid Build Coastguard Worker /** 666*663afb9bSAndroid Build Coastguard Worker Initialize the event API. 667*663afb9bSAndroid Build Coastguard Worker 668*663afb9bSAndroid Build Coastguard Worker Use event_base_new_with_config() to initialize a new event base, taking 669*663afb9bSAndroid Build Coastguard Worker the specified configuration under consideration. The configuration object 670*663afb9bSAndroid Build Coastguard Worker can currently be used to avoid certain event notification mechanisms. 671*663afb9bSAndroid Build Coastguard Worker 672*663afb9bSAndroid Build Coastguard Worker @param cfg the event configuration object 673*663afb9bSAndroid Build Coastguard Worker @return an initialized event_base that can be used to registering events, 674*663afb9bSAndroid Build Coastguard Worker or NULL if no event base can be created with the requested event_config. 675*663afb9bSAndroid Build Coastguard Worker @see event_base_new(), event_base_free(), event_init(), event_assign() 676*663afb9bSAndroid Build Coastguard Worker */ 677*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 678*663afb9bSAndroid Build Coastguard Worker struct event_base *event_base_new_with_config(const struct event_config *); 679*663afb9bSAndroid Build Coastguard Worker 680*663afb9bSAndroid Build Coastguard Worker /** 681*663afb9bSAndroid Build Coastguard Worker Deallocate all memory associated with an event_base, and free the base. 682*663afb9bSAndroid Build Coastguard Worker 683*663afb9bSAndroid Build Coastguard Worker Note that this function will not close any fds or free any memory passed 684*663afb9bSAndroid Build Coastguard Worker to event_new as the argument to callback. 685*663afb9bSAndroid Build Coastguard Worker 686*663afb9bSAndroid Build Coastguard Worker If there are any pending finalizer callbacks, this function will invoke 687*663afb9bSAndroid Build Coastguard Worker them. 688*663afb9bSAndroid Build Coastguard Worker 689*663afb9bSAndroid Build Coastguard Worker @param eb an event_base to be freed 690*663afb9bSAndroid Build Coastguard Worker */ 691*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 692*663afb9bSAndroid Build Coastguard Worker void event_base_free(struct event_base *); 693*663afb9bSAndroid Build Coastguard Worker 694*663afb9bSAndroid Build Coastguard Worker /** 695*663afb9bSAndroid Build Coastguard Worker As event_base_free, but do not run finalizers. 696*663afb9bSAndroid Build Coastguard Worker */ 697*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 698*663afb9bSAndroid Build Coastguard Worker void event_base_free_nofinalize(struct event_base *); 699*663afb9bSAndroid Build Coastguard Worker 700*663afb9bSAndroid Build Coastguard Worker /** @name Log severities 701*663afb9bSAndroid Build Coastguard Worker */ 702*663afb9bSAndroid Build Coastguard Worker /**@{*/ 703*663afb9bSAndroid Build Coastguard Worker #define EVENT_LOG_DEBUG 0 704*663afb9bSAndroid Build Coastguard Worker #define EVENT_LOG_MSG 1 705*663afb9bSAndroid Build Coastguard Worker #define EVENT_LOG_WARN 2 706*663afb9bSAndroid Build Coastguard Worker #define EVENT_LOG_ERR 3 707*663afb9bSAndroid Build Coastguard Worker /**@}*/ 708*663afb9bSAndroid Build Coastguard Worker 709*663afb9bSAndroid Build Coastguard Worker /* Obsolete names: these are deprecated, but older programs might use them. 710*663afb9bSAndroid Build Coastguard Worker * They violate the reserved-identifier namespace. */ 711*663afb9bSAndroid Build Coastguard Worker #define _EVENT_LOG_DEBUG EVENT_LOG_DEBUG 712*663afb9bSAndroid Build Coastguard Worker #define _EVENT_LOG_MSG EVENT_LOG_MSG 713*663afb9bSAndroid Build Coastguard Worker #define _EVENT_LOG_WARN EVENT_LOG_WARN 714*663afb9bSAndroid Build Coastguard Worker #define _EVENT_LOG_ERR EVENT_LOG_ERR 715*663afb9bSAndroid Build Coastguard Worker 716*663afb9bSAndroid Build Coastguard Worker /** 717*663afb9bSAndroid Build Coastguard Worker A callback function used to intercept Libevent's log messages. 718*663afb9bSAndroid Build Coastguard Worker 719*663afb9bSAndroid Build Coastguard Worker @see event_set_log_callback 720*663afb9bSAndroid Build Coastguard Worker */ 721*663afb9bSAndroid Build Coastguard Worker typedef void (*event_log_cb)(int severity, const char *msg); 722*663afb9bSAndroid Build Coastguard Worker /** 723*663afb9bSAndroid Build Coastguard Worker Redirect Libevent's log messages. 724*663afb9bSAndroid Build Coastguard Worker 725*663afb9bSAndroid Build Coastguard Worker @param cb a function taking two arguments: an integer severity between 726*663afb9bSAndroid Build Coastguard Worker EVENT_LOG_DEBUG and EVENT_LOG_ERR, and a string. If cb is NULL, 727*663afb9bSAndroid Build Coastguard Worker then the default log is used. 728*663afb9bSAndroid Build Coastguard Worker 729*663afb9bSAndroid Build Coastguard Worker NOTE: The function you provide *must not* call any other libevent 730*663afb9bSAndroid Build Coastguard Worker functionality. Doing so can produce undefined behavior. 731*663afb9bSAndroid Build Coastguard Worker */ 732*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 733*663afb9bSAndroid Build Coastguard Worker void event_set_log_callback(event_log_cb cb); 734*663afb9bSAndroid Build Coastguard Worker 735*663afb9bSAndroid Build Coastguard Worker /** 736*663afb9bSAndroid Build Coastguard Worker A function to be called if Libevent encounters a fatal internal error. 737*663afb9bSAndroid Build Coastguard Worker 738*663afb9bSAndroid Build Coastguard Worker @see event_set_fatal_callback 739*663afb9bSAndroid Build Coastguard Worker */ 740*663afb9bSAndroid Build Coastguard Worker typedef void (*event_fatal_cb)(int err); 741*663afb9bSAndroid Build Coastguard Worker 742*663afb9bSAndroid Build Coastguard Worker /** 743*663afb9bSAndroid Build Coastguard Worker Override Libevent's behavior in the event of a fatal internal error. 744*663afb9bSAndroid Build Coastguard Worker 745*663afb9bSAndroid Build Coastguard Worker By default, Libevent will call exit(1) if a programming error makes it 746*663afb9bSAndroid Build Coastguard Worker impossible to continue correct operation. This function allows you to supply 747*663afb9bSAndroid Build Coastguard Worker another callback instead. Note that if the function is ever invoked, 748*663afb9bSAndroid Build Coastguard Worker something is wrong with your program, or with Libevent: any subsequent calls 749*663afb9bSAndroid Build Coastguard Worker to Libevent may result in undefined behavior. 750*663afb9bSAndroid Build Coastguard Worker 751*663afb9bSAndroid Build Coastguard Worker Libevent will (almost) always log an EVENT_LOG_ERR message before calling 752*663afb9bSAndroid Build Coastguard Worker this function; look at the last log message to see why Libevent has died. 753*663afb9bSAndroid Build Coastguard Worker */ 754*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 755*663afb9bSAndroid Build Coastguard Worker void event_set_fatal_callback(event_fatal_cb cb); 756*663afb9bSAndroid Build Coastguard Worker 757*663afb9bSAndroid Build Coastguard Worker #define EVENT_DBG_ALL 0xffffffffu 758*663afb9bSAndroid Build Coastguard Worker #define EVENT_DBG_NONE 0 759*663afb9bSAndroid Build Coastguard Worker 760*663afb9bSAndroid Build Coastguard Worker /** 761*663afb9bSAndroid Build Coastguard Worker Turn on debugging logs and have them sent to the default log handler. 762*663afb9bSAndroid Build Coastguard Worker 763*663afb9bSAndroid Build Coastguard Worker This is a global setting; if you are going to call it, you must call this 764*663afb9bSAndroid Build Coastguard Worker before any calls that create an event-base. You must call it before any 765*663afb9bSAndroid Build Coastguard Worker multithreaded use of Libevent. 766*663afb9bSAndroid Build Coastguard Worker 767*663afb9bSAndroid Build Coastguard Worker Debug logs are verbose. 768*663afb9bSAndroid Build Coastguard Worker 769*663afb9bSAndroid Build Coastguard Worker @param which Controls which debug messages are turned on. This option is 770*663afb9bSAndroid Build Coastguard Worker unused for now; for forward compatibility, you must pass in the constant 771*663afb9bSAndroid Build Coastguard Worker "EVENT_DBG_ALL" to turn debugging logs on, or "EVENT_DBG_NONE" to turn 772*663afb9bSAndroid Build Coastguard Worker debugging logs off. 773*663afb9bSAndroid Build Coastguard Worker */ 774*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 775*663afb9bSAndroid Build Coastguard Worker void event_enable_debug_logging(ev_uint32_t which); 776*663afb9bSAndroid Build Coastguard Worker 777*663afb9bSAndroid Build Coastguard Worker /** 778*663afb9bSAndroid Build Coastguard Worker Associate a different event base with an event. 779*663afb9bSAndroid Build Coastguard Worker 780*663afb9bSAndroid Build Coastguard Worker The event to be associated must not be currently active or pending. 781*663afb9bSAndroid Build Coastguard Worker 782*663afb9bSAndroid Build Coastguard Worker @param eb the event base 783*663afb9bSAndroid Build Coastguard Worker @param ev the event 784*663afb9bSAndroid Build Coastguard Worker @return 0 on success, -1 on failure. 785*663afb9bSAndroid Build Coastguard Worker */ 786*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 787*663afb9bSAndroid Build Coastguard Worker int event_base_set(struct event_base *, struct event *); 788*663afb9bSAndroid Build Coastguard Worker 789*663afb9bSAndroid Build Coastguard Worker /** @name Loop flags 790*663afb9bSAndroid Build Coastguard Worker 791*663afb9bSAndroid Build Coastguard Worker These flags control the behavior of event_base_loop(). 792*663afb9bSAndroid Build Coastguard Worker */ 793*663afb9bSAndroid Build Coastguard Worker /**@{*/ 794*663afb9bSAndroid Build Coastguard Worker /** Block until we have an active event, then exit once all active events 795*663afb9bSAndroid Build Coastguard Worker * have had their callbacks run. */ 796*663afb9bSAndroid Build Coastguard Worker #define EVLOOP_ONCE 0x01 797*663afb9bSAndroid Build Coastguard Worker /** Do not block: see which events are ready now, run the callbacks 798*663afb9bSAndroid Build Coastguard Worker * of the highest-priority ones, then exit. */ 799*663afb9bSAndroid Build Coastguard Worker #define EVLOOP_NONBLOCK 0x02 800*663afb9bSAndroid Build Coastguard Worker /** Do not exit the loop because we have no pending events. Instead, keep 801*663afb9bSAndroid Build Coastguard Worker * running until event_base_loopexit() or event_base_loopbreak() makes us 802*663afb9bSAndroid Build Coastguard Worker * stop. 803*663afb9bSAndroid Build Coastguard Worker */ 804*663afb9bSAndroid Build Coastguard Worker #define EVLOOP_NO_EXIT_ON_EMPTY 0x04 805*663afb9bSAndroid Build Coastguard Worker /**@}*/ 806*663afb9bSAndroid Build Coastguard Worker 807*663afb9bSAndroid Build Coastguard Worker /** 808*663afb9bSAndroid Build Coastguard Worker Wait for events to become active, and run their callbacks. 809*663afb9bSAndroid Build Coastguard Worker 810*663afb9bSAndroid Build Coastguard Worker This is a more flexible version of event_base_dispatch(). 811*663afb9bSAndroid Build Coastguard Worker 812*663afb9bSAndroid Build Coastguard Worker By default, this loop will run the event base until either there are no more 813*663afb9bSAndroid Build Coastguard Worker pending or active events, or until something calls event_base_loopbreak() or 814*663afb9bSAndroid Build Coastguard Worker event_base_loopexit(). You can override this behavior with the 'flags' 815*663afb9bSAndroid Build Coastguard Worker argument. 816*663afb9bSAndroid Build Coastguard Worker 817*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_base_new() or 818*663afb9bSAndroid Build Coastguard Worker event_base_new_with_config() 819*663afb9bSAndroid Build Coastguard Worker @param flags any combination of EVLOOP_ONCE | EVLOOP_NONBLOCK 820*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, -1 if an error occurred, or 1 if we exited because 821*663afb9bSAndroid Build Coastguard Worker no events were pending or active. 822*663afb9bSAndroid Build Coastguard Worker @see event_base_loopexit(), event_base_dispatch(), EVLOOP_ONCE, 823*663afb9bSAndroid Build Coastguard Worker EVLOOP_NONBLOCK 824*663afb9bSAndroid Build Coastguard Worker */ 825*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 826*663afb9bSAndroid Build Coastguard Worker int event_base_loop(struct event_base *, int); 827*663afb9bSAndroid Build Coastguard Worker 828*663afb9bSAndroid Build Coastguard Worker /** 829*663afb9bSAndroid Build Coastguard Worker Exit the event loop after the specified time 830*663afb9bSAndroid Build Coastguard Worker 831*663afb9bSAndroid Build Coastguard Worker The next event_base_loop() iteration after the given timer expires will 832*663afb9bSAndroid Build Coastguard Worker complete normally (handling all queued events) then exit without 833*663afb9bSAndroid Build Coastguard Worker blocking for events again. 834*663afb9bSAndroid Build Coastguard Worker 835*663afb9bSAndroid Build Coastguard Worker Subsequent invocations of event_base_loop() will proceed normally. 836*663afb9bSAndroid Build Coastguard Worker 837*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 838*663afb9bSAndroid Build Coastguard Worker @param tv the amount of time after which the loop should terminate, 839*663afb9bSAndroid Build Coastguard Worker or NULL to exit after running all currently active events. 840*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 841*663afb9bSAndroid Build Coastguard Worker @see event_base_loopbreak() 842*663afb9bSAndroid Build Coastguard Worker */ 843*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 844*663afb9bSAndroid Build Coastguard Worker int event_base_loopexit(struct event_base *, const struct timeval *); 845*663afb9bSAndroid Build Coastguard Worker 846*663afb9bSAndroid Build Coastguard Worker /** 847*663afb9bSAndroid Build Coastguard Worker Abort the active event_base_loop() immediately. 848*663afb9bSAndroid Build Coastguard Worker 849*663afb9bSAndroid Build Coastguard Worker event_base_loop() will abort the loop after the next event is completed; 850*663afb9bSAndroid Build Coastguard Worker event_base_loopbreak() is typically invoked from this event's callback. 851*663afb9bSAndroid Build Coastguard Worker This behavior is analogous to the "break;" statement. 852*663afb9bSAndroid Build Coastguard Worker 853*663afb9bSAndroid Build Coastguard Worker Subsequent invocations of event_base_loop() will proceed normally. 854*663afb9bSAndroid Build Coastguard Worker 855*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 856*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 857*663afb9bSAndroid Build Coastguard Worker @see event_base_loopexit() 858*663afb9bSAndroid Build Coastguard Worker */ 859*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 860*663afb9bSAndroid Build Coastguard Worker int event_base_loopbreak(struct event_base *); 861*663afb9bSAndroid Build Coastguard Worker 862*663afb9bSAndroid Build Coastguard Worker /** 863*663afb9bSAndroid Build Coastguard Worker Tell the active event_base_loop() to scan for new events immediately. 864*663afb9bSAndroid Build Coastguard Worker 865*663afb9bSAndroid Build Coastguard Worker Calling this function makes the currently active event_base_loop() 866*663afb9bSAndroid Build Coastguard Worker start the loop over again (scanning for new events) after the current 867*663afb9bSAndroid Build Coastguard Worker event callback finishes. If the event loop is not running, this 868*663afb9bSAndroid Build Coastguard Worker function has no effect. 869*663afb9bSAndroid Build Coastguard Worker 870*663afb9bSAndroid Build Coastguard Worker event_base_loopbreak() is typically invoked from this event's callback. 871*663afb9bSAndroid Build Coastguard Worker This behavior is analogous to the "continue;" statement. 872*663afb9bSAndroid Build Coastguard Worker 873*663afb9bSAndroid Build Coastguard Worker Subsequent invocations of event loop will proceed normally. 874*663afb9bSAndroid Build Coastguard Worker 875*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 876*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 877*663afb9bSAndroid Build Coastguard Worker @see event_base_loopbreak() 878*663afb9bSAndroid Build Coastguard Worker */ 879*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 880*663afb9bSAndroid Build Coastguard Worker int event_base_loopcontinue(struct event_base *); 881*663afb9bSAndroid Build Coastguard Worker 882*663afb9bSAndroid Build Coastguard Worker /** 883*663afb9bSAndroid Build Coastguard Worker Checks if the event loop was told to exit by event_base_loopexit(). 884*663afb9bSAndroid Build Coastguard Worker 885*663afb9bSAndroid Build Coastguard Worker This function will return true for an event_base at every point after 886*663afb9bSAndroid Build Coastguard Worker event_loopexit() is called, until the event loop is next entered. 887*663afb9bSAndroid Build Coastguard Worker 888*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 889*663afb9bSAndroid Build Coastguard Worker @return true if event_base_loopexit() was called on this event base, 890*663afb9bSAndroid Build Coastguard Worker or 0 otherwise 891*663afb9bSAndroid Build Coastguard Worker @see event_base_loopexit() 892*663afb9bSAndroid Build Coastguard Worker @see event_base_got_break() 893*663afb9bSAndroid Build Coastguard Worker */ 894*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 895*663afb9bSAndroid Build Coastguard Worker int event_base_got_exit(struct event_base *); 896*663afb9bSAndroid Build Coastguard Worker 897*663afb9bSAndroid Build Coastguard Worker /** 898*663afb9bSAndroid Build Coastguard Worker Checks if the event loop was told to abort immediately by event_base_loopbreak(). 899*663afb9bSAndroid Build Coastguard Worker 900*663afb9bSAndroid Build Coastguard Worker This function will return true for an event_base at every point after 901*663afb9bSAndroid Build Coastguard Worker event_base_loopbreak() is called, until the event loop is next entered. 902*663afb9bSAndroid Build Coastguard Worker 903*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 904*663afb9bSAndroid Build Coastguard Worker @return true if event_base_loopbreak() was called on this event base, 905*663afb9bSAndroid Build Coastguard Worker or 0 otherwise 906*663afb9bSAndroid Build Coastguard Worker @see event_base_loopbreak() 907*663afb9bSAndroid Build Coastguard Worker @see event_base_got_exit() 908*663afb9bSAndroid Build Coastguard Worker */ 909*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 910*663afb9bSAndroid Build Coastguard Worker int event_base_got_break(struct event_base *); 911*663afb9bSAndroid Build Coastguard Worker 912*663afb9bSAndroid Build Coastguard Worker /** 913*663afb9bSAndroid Build Coastguard Worker * @name event flags 914*663afb9bSAndroid Build Coastguard Worker * 915*663afb9bSAndroid Build Coastguard Worker * Flags to pass to event_new(), event_assign(), event_pending(), and 916*663afb9bSAndroid Build Coastguard Worker * anything else with an argument of the form "short events" 917*663afb9bSAndroid Build Coastguard Worker */ 918*663afb9bSAndroid Build Coastguard Worker /**@{*/ 919*663afb9bSAndroid Build Coastguard Worker /** Indicates that a timeout has occurred. It's not necessary to pass 920*663afb9bSAndroid Build Coastguard Worker * this flag to event_for new()/event_assign() to get a timeout. */ 921*663afb9bSAndroid Build Coastguard Worker #define EV_TIMEOUT 0x01 922*663afb9bSAndroid Build Coastguard Worker /** Wait for a socket or FD to become readable */ 923*663afb9bSAndroid Build Coastguard Worker #define EV_READ 0x02 924*663afb9bSAndroid Build Coastguard Worker /** Wait for a socket or FD to become writeable */ 925*663afb9bSAndroid Build Coastguard Worker #define EV_WRITE 0x04 926*663afb9bSAndroid Build Coastguard Worker /** Wait for a POSIX signal to be raised*/ 927*663afb9bSAndroid Build Coastguard Worker #define EV_SIGNAL 0x08 928*663afb9bSAndroid Build Coastguard Worker /** 929*663afb9bSAndroid Build Coastguard Worker * Persistent event: won't get removed automatically when activated. 930*663afb9bSAndroid Build Coastguard Worker * 931*663afb9bSAndroid Build Coastguard Worker * When a persistent event with a timeout becomes activated, its timeout 932*663afb9bSAndroid Build Coastguard Worker * is reset to 0. 933*663afb9bSAndroid Build Coastguard Worker */ 934*663afb9bSAndroid Build Coastguard Worker #define EV_PERSIST 0x10 935*663afb9bSAndroid Build Coastguard Worker /** Select edge-triggered behavior, if supported by the backend. */ 936*663afb9bSAndroid Build Coastguard Worker #define EV_ET 0x20 937*663afb9bSAndroid Build Coastguard Worker /** 938*663afb9bSAndroid Build Coastguard Worker * If this option is provided, then event_del() will not block in one thread 939*663afb9bSAndroid Build Coastguard Worker * while waiting for the event callback to complete in another thread. 940*663afb9bSAndroid Build Coastguard Worker * 941*663afb9bSAndroid Build Coastguard Worker * To use this option safely, you may need to use event_finalize() or 942*663afb9bSAndroid Build Coastguard Worker * event_free_finalize() in order to safely tear down an event in a 943*663afb9bSAndroid Build Coastguard Worker * multithreaded application. See those functions for more information. 944*663afb9bSAndroid Build Coastguard Worker **/ 945*663afb9bSAndroid Build Coastguard Worker #define EV_FINALIZE 0x40 946*663afb9bSAndroid Build Coastguard Worker /** 947*663afb9bSAndroid Build Coastguard Worker * Detects connection close events. You can use this to detect when a 948*663afb9bSAndroid Build Coastguard Worker * connection has been closed, without having to read all the pending data 949*663afb9bSAndroid Build Coastguard Worker * from a connection. 950*663afb9bSAndroid Build Coastguard Worker * 951*663afb9bSAndroid Build Coastguard Worker * Not all backends support EV_CLOSED. To detect or require it, use the 952*663afb9bSAndroid Build Coastguard Worker * feature flag EV_FEATURE_EARLY_CLOSE. 953*663afb9bSAndroid Build Coastguard Worker **/ 954*663afb9bSAndroid Build Coastguard Worker #define EV_CLOSED 0x80 955*663afb9bSAndroid Build Coastguard Worker /**@}*/ 956*663afb9bSAndroid Build Coastguard Worker 957*663afb9bSAndroid Build Coastguard Worker /** 958*663afb9bSAndroid Build Coastguard Worker @name evtimer_* macros 959*663afb9bSAndroid Build Coastguard Worker 960*663afb9bSAndroid Build Coastguard Worker Aliases for working with one-shot timer events 961*663afb9bSAndroid Build Coastguard Worker If you need EV_PERSIST timer use event_*() functions. 962*663afb9bSAndroid Build Coastguard Worker */ 963*663afb9bSAndroid Build Coastguard Worker /**@{*/ 964*663afb9bSAndroid Build Coastguard Worker #define evtimer_assign(ev, b, cb, arg) \ 965*663afb9bSAndroid Build Coastguard Worker event_assign((ev), (b), -1, 0, (cb), (arg)) 966*663afb9bSAndroid Build Coastguard Worker #define evtimer_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg)) 967*663afb9bSAndroid Build Coastguard Worker #define evtimer_add(ev, tv) event_add((ev), (tv)) 968*663afb9bSAndroid Build Coastguard Worker #define evtimer_del(ev) event_del(ev) 969*663afb9bSAndroid Build Coastguard Worker #define evtimer_pending(ev, tv) event_pending((ev), EV_TIMEOUT, (tv)) 970*663afb9bSAndroid Build Coastguard Worker #define evtimer_initialized(ev) event_initialized(ev) 971*663afb9bSAndroid Build Coastguard Worker /**@}*/ 972*663afb9bSAndroid Build Coastguard Worker 973*663afb9bSAndroid Build Coastguard Worker /** 974*663afb9bSAndroid Build Coastguard Worker @name evsignal_* macros 975*663afb9bSAndroid Build Coastguard Worker 976*663afb9bSAndroid Build Coastguard Worker Aliases for working with signal events 977*663afb9bSAndroid Build Coastguard Worker */ 978*663afb9bSAndroid Build Coastguard Worker /**@{*/ 979*663afb9bSAndroid Build Coastguard Worker #define evsignal_add(ev, tv) event_add((ev), (tv)) 980*663afb9bSAndroid Build Coastguard Worker #define evsignal_assign(ev, b, x, cb, arg) \ 981*663afb9bSAndroid Build Coastguard Worker event_assign((ev), (b), (x), EV_SIGNAL|EV_PERSIST, cb, (arg)) 982*663afb9bSAndroid Build Coastguard Worker #define evsignal_new(b, x, cb, arg) \ 983*663afb9bSAndroid Build Coastguard Worker event_new((b), (x), EV_SIGNAL|EV_PERSIST, (cb), (arg)) 984*663afb9bSAndroid Build Coastguard Worker #define evsignal_del(ev) event_del(ev) 985*663afb9bSAndroid Build Coastguard Worker #define evsignal_pending(ev, tv) event_pending((ev), EV_SIGNAL, (tv)) 986*663afb9bSAndroid Build Coastguard Worker #define evsignal_initialized(ev) event_initialized(ev) 987*663afb9bSAndroid Build Coastguard Worker /**@}*/ 988*663afb9bSAndroid Build Coastguard Worker 989*663afb9bSAndroid Build Coastguard Worker /** 990*663afb9bSAndroid Build Coastguard Worker @name evuser_* macros 991*663afb9bSAndroid Build Coastguard Worker 992*663afb9bSAndroid Build Coastguard Worker Aliases for working with user-triggered events 993*663afb9bSAndroid Build Coastguard Worker If you need EV_PERSIST event use event_*() functions. 994*663afb9bSAndroid Build Coastguard Worker */ 995*663afb9bSAndroid Build Coastguard Worker /**@{*/ 996*663afb9bSAndroid Build Coastguard Worker #define evuser_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg)) 997*663afb9bSAndroid Build Coastguard Worker #define evuser_del(ev) event_del(ev) 998*663afb9bSAndroid Build Coastguard Worker #define evuser_pending(ev, tv) event_pending((ev), 0, (tv)) 999*663afb9bSAndroid Build Coastguard Worker #define evuser_initialized(ev) event_initialized(ev) 1000*663afb9bSAndroid Build Coastguard Worker #define evuser_trigger(ev) event_active((ev), 0, 0) 1001*663afb9bSAndroid Build Coastguard Worker /**@}*/ 1002*663afb9bSAndroid Build Coastguard Worker 1003*663afb9bSAndroid Build Coastguard Worker /** 1004*663afb9bSAndroid Build Coastguard Worker A callback function for an event. 1005*663afb9bSAndroid Build Coastguard Worker 1006*663afb9bSAndroid Build Coastguard Worker It receives three arguments: 1007*663afb9bSAndroid Build Coastguard Worker 1008*663afb9bSAndroid Build Coastguard Worker @param fd An fd or signal 1009*663afb9bSAndroid Build Coastguard Worker @param events One or more EV_* flags 1010*663afb9bSAndroid Build Coastguard Worker @param arg A user-supplied argument. 1011*663afb9bSAndroid Build Coastguard Worker 1012*663afb9bSAndroid Build Coastguard Worker @see event_new() 1013*663afb9bSAndroid Build Coastguard Worker */ 1014*663afb9bSAndroid Build Coastguard Worker typedef void (*event_callback_fn)(evutil_socket_t, short, void *); 1015*663afb9bSAndroid Build Coastguard Worker 1016*663afb9bSAndroid Build Coastguard Worker /** 1017*663afb9bSAndroid Build Coastguard Worker Return a value used to specify that the event itself must be used as the callback argument. 1018*663afb9bSAndroid Build Coastguard Worker 1019*663afb9bSAndroid Build Coastguard Worker The function event_new() takes a callback argument which is passed 1020*663afb9bSAndroid Build Coastguard Worker to the event's callback function. To specify that the argument to be 1021*663afb9bSAndroid Build Coastguard Worker passed to the callback function is the event that event_new() returns, 1022*663afb9bSAndroid Build Coastguard Worker pass in the return value of event_self_cbarg() as the callback argument 1023*663afb9bSAndroid Build Coastguard Worker for event_new(). 1024*663afb9bSAndroid Build Coastguard Worker 1025*663afb9bSAndroid Build Coastguard Worker For example: 1026*663afb9bSAndroid Build Coastguard Worker <pre> 1027*663afb9bSAndroid Build Coastguard Worker struct event *ev = event_new(base, sock, events, callback, %event_self_cbarg()); 1028*663afb9bSAndroid Build Coastguard Worker </pre> 1029*663afb9bSAndroid Build Coastguard Worker 1030*663afb9bSAndroid Build Coastguard Worker For consistency with event_new(), it is possible to pass the return value 1031*663afb9bSAndroid Build Coastguard Worker of this function as the callback argument for event_assign() – this 1032*663afb9bSAndroid Build Coastguard Worker achieves the same result as passing the event in directly. 1033*663afb9bSAndroid Build Coastguard Worker 1034*663afb9bSAndroid Build Coastguard Worker @return a value to be passed as the callback argument to event_new() or 1035*663afb9bSAndroid Build Coastguard Worker event_assign(). 1036*663afb9bSAndroid Build Coastguard Worker @see event_new(), event_assign() 1037*663afb9bSAndroid Build Coastguard Worker */ 1038*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1039*663afb9bSAndroid Build Coastguard Worker void *event_self_cbarg(void); 1040*663afb9bSAndroid Build Coastguard Worker 1041*663afb9bSAndroid Build Coastguard Worker /** 1042*663afb9bSAndroid Build Coastguard Worker Allocate and assign a new event structure, ready to be added. 1043*663afb9bSAndroid Build Coastguard Worker 1044*663afb9bSAndroid Build Coastguard Worker The function event_new() returns a new event that can be used in 1045*663afb9bSAndroid Build Coastguard Worker future calls to event_add() and event_del(). The fd and events 1046*663afb9bSAndroid Build Coastguard Worker arguments determine which conditions will trigger the event; the 1047*663afb9bSAndroid Build Coastguard Worker callback and callback_arg arguments tell Libevent what to do when the 1048*663afb9bSAndroid Build Coastguard Worker event becomes active. 1049*663afb9bSAndroid Build Coastguard Worker 1050*663afb9bSAndroid Build Coastguard Worker If events contains one of EV_READ, EV_WRITE, or EV_READ|EV_WRITE, then 1051*663afb9bSAndroid Build Coastguard Worker fd is a file descriptor or socket that should get monitored for 1052*663afb9bSAndroid Build Coastguard Worker readiness to read, readiness to write, or readiness for either operation 1053*663afb9bSAndroid Build Coastguard Worker (respectively). If events contains EV_SIGNAL, then fd is a signal 1054*663afb9bSAndroid Build Coastguard Worker number to wait for. If events contains none of those flags, then the 1055*663afb9bSAndroid Build Coastguard Worker event can be triggered only by a timeout or by manual activation with 1056*663afb9bSAndroid Build Coastguard Worker event_active(): In this case, fd must be -1. 1057*663afb9bSAndroid Build Coastguard Worker 1058*663afb9bSAndroid Build Coastguard Worker The EV_PERSIST flag can also be passed in the events argument: it makes 1059*663afb9bSAndroid Build Coastguard Worker event_add() persistent until event_del() is called. 1060*663afb9bSAndroid Build Coastguard Worker 1061*663afb9bSAndroid Build Coastguard Worker The EV_ET flag is compatible with EV_READ and EV_WRITE, and supported 1062*663afb9bSAndroid Build Coastguard Worker only by certain backends. It tells Libevent to use edge-triggered 1063*663afb9bSAndroid Build Coastguard Worker events. 1064*663afb9bSAndroid Build Coastguard Worker 1065*663afb9bSAndroid Build Coastguard Worker The EV_TIMEOUT flag has no effect here. 1066*663afb9bSAndroid Build Coastguard Worker 1067*663afb9bSAndroid Build Coastguard Worker It is okay to have multiple events all listening on the same fds; but 1068*663afb9bSAndroid Build Coastguard Worker they must either all be edge-triggered, or all not be edge triggered. 1069*663afb9bSAndroid Build Coastguard Worker 1070*663afb9bSAndroid Build Coastguard Worker When the event becomes active, the event loop will run the provided 1071*663afb9bSAndroid Build Coastguard Worker callback function, with three arguments. The first will be the provided 1072*663afb9bSAndroid Build Coastguard Worker fd value. The second will be a bitfield of the events that triggered: 1073*663afb9bSAndroid Build Coastguard Worker EV_READ, EV_WRITE, or EV_SIGNAL. Here the EV_TIMEOUT flag indicates 1074*663afb9bSAndroid Build Coastguard Worker that a timeout occurred, and EV_ET indicates that an edge-triggered 1075*663afb9bSAndroid Build Coastguard Worker event occurred. The third event will be the callback_arg pointer that 1076*663afb9bSAndroid Build Coastguard Worker you provide. 1077*663afb9bSAndroid Build Coastguard Worker 1078*663afb9bSAndroid Build Coastguard Worker @param base the event base to which the event should be attached. 1079*663afb9bSAndroid Build Coastguard Worker @param fd the file descriptor or signal to be monitored, or -1. 1080*663afb9bSAndroid Build Coastguard Worker @param events desired events to monitor: bitfield of EV_READ, EV_WRITE, 1081*663afb9bSAndroid Build Coastguard Worker EV_SIGNAL, EV_PERSIST, EV_ET. 1082*663afb9bSAndroid Build Coastguard Worker @param callback callback function to be invoked when the event occurs 1083*663afb9bSAndroid Build Coastguard Worker @param callback_arg an argument to be passed to the callback function 1084*663afb9bSAndroid Build Coastguard Worker 1085*663afb9bSAndroid Build Coastguard Worker @return a newly allocated struct event that must later be freed with 1086*663afb9bSAndroid Build Coastguard Worker event_free() or NULL if an error occurred. 1087*663afb9bSAndroid Build Coastguard Worker @see event_free(), event_add(), event_del(), event_assign() 1088*663afb9bSAndroid Build Coastguard Worker */ 1089*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1090*663afb9bSAndroid Build Coastguard Worker struct event *event_new(struct event_base *, evutil_socket_t, short, event_callback_fn, void *); 1091*663afb9bSAndroid Build Coastguard Worker 1092*663afb9bSAndroid Build Coastguard Worker 1093*663afb9bSAndroid Build Coastguard Worker /** 1094*663afb9bSAndroid Build Coastguard Worker Prepare a new, already-allocated event structure to be added. 1095*663afb9bSAndroid Build Coastguard Worker 1096*663afb9bSAndroid Build Coastguard Worker The function event_assign() prepares the event structure ev to be used 1097*663afb9bSAndroid Build Coastguard Worker in future calls to event_add() and event_del(). Unlike event_new(), it 1098*663afb9bSAndroid Build Coastguard Worker doesn't allocate memory itself: it requires that you have already 1099*663afb9bSAndroid Build Coastguard Worker allocated a struct event, probably on the heap. Doing this will 1100*663afb9bSAndroid Build Coastguard Worker typically make your code depend on the size of the event structure, and 1101*663afb9bSAndroid Build Coastguard Worker thereby create incompatibility with future versions of Libevent. 1102*663afb9bSAndroid Build Coastguard Worker 1103*663afb9bSAndroid Build Coastguard Worker The easiest way to avoid this problem is just to use event_new() and 1104*663afb9bSAndroid Build Coastguard Worker event_free() instead. 1105*663afb9bSAndroid Build Coastguard Worker 1106*663afb9bSAndroid Build Coastguard Worker A slightly harder way to future-proof your code is to use 1107*663afb9bSAndroid Build Coastguard Worker event_get_struct_event_size() to determine the required size of an event 1108*663afb9bSAndroid Build Coastguard Worker at runtime. 1109*663afb9bSAndroid Build Coastguard Worker 1110*663afb9bSAndroid Build Coastguard Worker Note that it is NOT safe to call this function on an event that is 1111*663afb9bSAndroid Build Coastguard Worker active or pending. Doing so WILL corrupt internal data structures in 1112*663afb9bSAndroid Build Coastguard Worker Libevent, and lead to strange, hard-to-diagnose bugs. You _can_ use 1113*663afb9bSAndroid Build Coastguard Worker event_assign to change an existing event, but only if it is not active 1114*663afb9bSAndroid Build Coastguard Worker or pending! 1115*663afb9bSAndroid Build Coastguard Worker 1116*663afb9bSAndroid Build Coastguard Worker The arguments for this function, and the behavior of the events that it 1117*663afb9bSAndroid Build Coastguard Worker makes, are as for event_new(). 1118*663afb9bSAndroid Build Coastguard Worker 1119*663afb9bSAndroid Build Coastguard Worker @param ev an event struct to be modified 1120*663afb9bSAndroid Build Coastguard Worker @param base the event base to which ev should be attached. 1121*663afb9bSAndroid Build Coastguard Worker @param fd the file descriptor to be monitored 1122*663afb9bSAndroid Build Coastguard Worker @param events desired events to monitor; can be EV_READ and/or EV_WRITE 1123*663afb9bSAndroid Build Coastguard Worker @param callback callback function to be invoked when the event occurs 1124*663afb9bSAndroid Build Coastguard Worker @param callback_arg an argument to be passed to the callback function 1125*663afb9bSAndroid Build Coastguard Worker 1126*663afb9bSAndroid Build Coastguard Worker @return 0 if success, or -1 on invalid arguments. 1127*663afb9bSAndroid Build Coastguard Worker 1128*663afb9bSAndroid Build Coastguard Worker @see event_new(), event_add(), event_del(), event_base_once(), 1129*663afb9bSAndroid Build Coastguard Worker event_get_struct_event_size() 1130*663afb9bSAndroid Build Coastguard Worker */ 1131*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1132*663afb9bSAndroid Build Coastguard Worker int event_assign(struct event *, struct event_base *, evutil_socket_t, short, event_callback_fn, void *); 1133*663afb9bSAndroid Build Coastguard Worker 1134*663afb9bSAndroid Build Coastguard Worker /** 1135*663afb9bSAndroid Build Coastguard Worker Deallocate a struct event * returned by event_new(). 1136*663afb9bSAndroid Build Coastguard Worker 1137*663afb9bSAndroid Build Coastguard Worker If the event is pending or active, this function makes it non-pending 1138*663afb9bSAndroid Build Coastguard Worker and non-active first. 1139*663afb9bSAndroid Build Coastguard Worker */ 1140*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1141*663afb9bSAndroid Build Coastguard Worker void event_free(struct event *); 1142*663afb9bSAndroid Build Coastguard Worker 1143*663afb9bSAndroid Build Coastguard Worker /** 1144*663afb9bSAndroid Build Coastguard Worker * Callback type for event_finalize and event_free_finalize(). 1145*663afb9bSAndroid Build Coastguard Worker **/ 1146*663afb9bSAndroid Build Coastguard Worker typedef void (*event_finalize_callback_fn)(struct event *, void *); 1147*663afb9bSAndroid Build Coastguard Worker /** 1148*663afb9bSAndroid Build Coastguard Worker @name Finalization functions 1149*663afb9bSAndroid Build Coastguard Worker 1150*663afb9bSAndroid Build Coastguard Worker These functions are used to safely tear down an event in a multithreaded 1151*663afb9bSAndroid Build Coastguard Worker application. If you construct your events with EV_FINALIZE to avoid 1152*663afb9bSAndroid Build Coastguard Worker deadlocks, you will need a way to remove an event in the certainty that 1153*663afb9bSAndroid Build Coastguard Worker it will definitely not be running its callback when you deallocate it 1154*663afb9bSAndroid Build Coastguard Worker and its callback argument. 1155*663afb9bSAndroid Build Coastguard Worker 1156*663afb9bSAndroid Build Coastguard Worker To do this, call one of event_finalize() or event_free_finalize with 1157*663afb9bSAndroid Build Coastguard Worker 0 for its first argument, the event to tear down as its second argument, 1158*663afb9bSAndroid Build Coastguard Worker and a callback function as its third argument. The callback will be 1159*663afb9bSAndroid Build Coastguard Worker invoked as part of the event loop, with the event's priority. 1160*663afb9bSAndroid Build Coastguard Worker 1161*663afb9bSAndroid Build Coastguard Worker After you call a finalizer function, event_add() and event_active() will 1162*663afb9bSAndroid Build Coastguard Worker no longer work on the event, and event_del() will produce a no-op. You 1163*663afb9bSAndroid Build Coastguard Worker must not try to change the event's fields with event_assign() or 1164*663afb9bSAndroid Build Coastguard Worker event_set() while the finalize callback is in progress. Once the 1165*663afb9bSAndroid Build Coastguard Worker callback has been invoked, you should treat the event structure as 1166*663afb9bSAndroid Build Coastguard Worker containing uninitialized memory. 1167*663afb9bSAndroid Build Coastguard Worker 1168*663afb9bSAndroid Build Coastguard Worker The event_free_finalize() function frees the event after it's finalized; 1169*663afb9bSAndroid Build Coastguard Worker event_finalize() does not. 1170*663afb9bSAndroid Build Coastguard Worker 1171*663afb9bSAndroid Build Coastguard Worker A finalizer callback must not make events pending or active. It must not 1172*663afb9bSAndroid Build Coastguard Worker add events, activate events, or attempt to "resuscitate" the event being 1173*663afb9bSAndroid Build Coastguard Worker finalized in any way. 1174*663afb9bSAndroid Build Coastguard Worker 1175*663afb9bSAndroid Build Coastguard Worker @return 0 on success, -1 on failure. 1176*663afb9bSAndroid Build Coastguard Worker */ 1177*663afb9bSAndroid Build Coastguard Worker /**@{*/ 1178*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1179*663afb9bSAndroid Build Coastguard Worker int event_finalize(unsigned, struct event *, event_finalize_callback_fn); 1180*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1181*663afb9bSAndroid Build Coastguard Worker int event_free_finalize(unsigned, struct event *, event_finalize_callback_fn); 1182*663afb9bSAndroid Build Coastguard Worker /**@}*/ 1183*663afb9bSAndroid Build Coastguard Worker 1184*663afb9bSAndroid Build Coastguard Worker /** 1185*663afb9bSAndroid Build Coastguard Worker Schedule a one-time event 1186*663afb9bSAndroid Build Coastguard Worker 1187*663afb9bSAndroid Build Coastguard Worker The function event_base_once() is similar to event_new(). However, it 1188*663afb9bSAndroid Build Coastguard Worker schedules a callback to be called exactly once, and does not require the 1189*663afb9bSAndroid Build Coastguard Worker caller to prepare an event structure. 1190*663afb9bSAndroid Build Coastguard Worker 1191*663afb9bSAndroid Build Coastguard Worker Note that in Libevent 2.0 and earlier, if the event is never triggered, the 1192*663afb9bSAndroid Build Coastguard Worker internal memory used to hold it will never be freed. In Libevent 2.1, 1193*663afb9bSAndroid Build Coastguard Worker the internal memory will get freed by event_base_free() if the event 1194*663afb9bSAndroid Build Coastguard Worker is never triggered. The 'arg' value, however, will not get freed in either 1195*663afb9bSAndroid Build Coastguard Worker case--you'll need to free that on your own if you want it to go away. 1196*663afb9bSAndroid Build Coastguard Worker 1197*663afb9bSAndroid Build Coastguard Worker @param base an event_base 1198*663afb9bSAndroid Build Coastguard Worker @param fd a file descriptor to monitor, or -1 for no fd. 1199*663afb9bSAndroid Build Coastguard Worker @param events event(s) to monitor; can be any of EV_READ | 1200*663afb9bSAndroid Build Coastguard Worker EV_WRITE, or EV_TIMEOUT 1201*663afb9bSAndroid Build Coastguard Worker @param callback callback function to be invoked when the event occurs 1202*663afb9bSAndroid Build Coastguard Worker @param arg an argument to be passed to the callback function 1203*663afb9bSAndroid Build Coastguard Worker @param timeout the maximum amount of time to wait for the event. NULL 1204*663afb9bSAndroid Build Coastguard Worker makes an EV_READ/EV_WRITE event make forever; NULL makes an 1205*663afb9bSAndroid Build Coastguard Worker EV_TIMEOUT event success immediately. 1206*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 1207*663afb9bSAndroid Build Coastguard Worker */ 1208*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1209*663afb9bSAndroid Build Coastguard Worker int event_base_once(struct event_base *, evutil_socket_t, short, event_callback_fn, void *, const struct timeval *); 1210*663afb9bSAndroid Build Coastguard Worker 1211*663afb9bSAndroid Build Coastguard Worker /** 1212*663afb9bSAndroid Build Coastguard Worker Add an event to the set of pending events. 1213*663afb9bSAndroid Build Coastguard Worker 1214*663afb9bSAndroid Build Coastguard Worker The function event_add() schedules the execution of the event 'ev' when the 1215*663afb9bSAndroid Build Coastguard Worker condition specified by event_assign() or event_new() occurs, or when the time 1216*663afb9bSAndroid Build Coastguard Worker specified in timeout has elapsed. If a timeout is NULL, no timeout 1217*663afb9bSAndroid Build Coastguard Worker occurs and the function will only be 1218*663afb9bSAndroid Build Coastguard Worker called if a matching event occurs. The event in the 1219*663afb9bSAndroid Build Coastguard Worker ev argument must be already initialized by event_assign() or event_new() 1220*663afb9bSAndroid Build Coastguard Worker and may not be used 1221*663afb9bSAndroid Build Coastguard Worker in calls to event_assign() until it is no longer pending. 1222*663afb9bSAndroid Build Coastguard Worker 1223*663afb9bSAndroid Build Coastguard Worker If the event in the ev argument already has a scheduled timeout, calling 1224*663afb9bSAndroid Build Coastguard Worker event_add() replaces the old timeout with the new one if tv is non-NULL. 1225*663afb9bSAndroid Build Coastguard Worker 1226*663afb9bSAndroid Build Coastguard Worker @param ev an event struct initialized via event_assign() or event_new() 1227*663afb9bSAndroid Build Coastguard Worker @param timeout the maximum amount of time to wait for the event, or NULL 1228*663afb9bSAndroid Build Coastguard Worker to wait forever 1229*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 1230*663afb9bSAndroid Build Coastguard Worker @see event_del(), event_assign(), event_new() 1231*663afb9bSAndroid Build Coastguard Worker */ 1232*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1233*663afb9bSAndroid Build Coastguard Worker int event_add(struct event *ev, const struct timeval *timeout); 1234*663afb9bSAndroid Build Coastguard Worker 1235*663afb9bSAndroid Build Coastguard Worker /** 1236*663afb9bSAndroid Build Coastguard Worker Remove a timer from a pending event without removing the event itself. 1237*663afb9bSAndroid Build Coastguard Worker 1238*663afb9bSAndroid Build Coastguard Worker If the event has a scheduled timeout, this function unschedules it but 1239*663afb9bSAndroid Build Coastguard Worker leaves the event otherwise pending. 1240*663afb9bSAndroid Build Coastguard Worker 1241*663afb9bSAndroid Build Coastguard Worker @param ev an event struct initialized via event_assign() or event_new() 1242*663afb9bSAndroid Build Coastguard Worker @return 0 on success, or -1 if an error occurred. 1243*663afb9bSAndroid Build Coastguard Worker */ 1244*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1245*663afb9bSAndroid Build Coastguard Worker int event_remove_timer(struct event *ev); 1246*663afb9bSAndroid Build Coastguard Worker 1247*663afb9bSAndroid Build Coastguard Worker /** 1248*663afb9bSAndroid Build Coastguard Worker Remove an event from the set of monitored events. 1249*663afb9bSAndroid Build Coastguard Worker 1250*663afb9bSAndroid Build Coastguard Worker The function event_del() will cancel the event in the argument ev. If the 1251*663afb9bSAndroid Build Coastguard Worker event has already executed or has never been added the call will have no 1252*663afb9bSAndroid Build Coastguard Worker effect. 1253*663afb9bSAndroid Build Coastguard Worker 1254*663afb9bSAndroid Build Coastguard Worker @param ev an event struct to be removed from the working set 1255*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 1256*663afb9bSAndroid Build Coastguard Worker @see event_add() 1257*663afb9bSAndroid Build Coastguard Worker */ 1258*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1259*663afb9bSAndroid Build Coastguard Worker int event_del(struct event *); 1260*663afb9bSAndroid Build Coastguard Worker 1261*663afb9bSAndroid Build Coastguard Worker /** 1262*663afb9bSAndroid Build Coastguard Worker As event_del(), but never blocks while the event's callback is running 1263*663afb9bSAndroid Build Coastguard Worker in another thread, even if the event was constructed without the 1264*663afb9bSAndroid Build Coastguard Worker EV_FINALIZE flag. 1265*663afb9bSAndroid Build Coastguard Worker */ 1266*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1267*663afb9bSAndroid Build Coastguard Worker int event_del_noblock(struct event *ev); 1268*663afb9bSAndroid Build Coastguard Worker /** 1269*663afb9bSAndroid Build Coastguard Worker As event_del(), but always blocks while the event's callback is running 1270*663afb9bSAndroid Build Coastguard Worker in another thread, even if the event was constructed with the 1271*663afb9bSAndroid Build Coastguard Worker EV_FINALIZE flag. 1272*663afb9bSAndroid Build Coastguard Worker */ 1273*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1274*663afb9bSAndroid Build Coastguard Worker int event_del_block(struct event *ev); 1275*663afb9bSAndroid Build Coastguard Worker 1276*663afb9bSAndroid Build Coastguard Worker /** 1277*663afb9bSAndroid Build Coastguard Worker Make an event active. 1278*663afb9bSAndroid Build Coastguard Worker 1279*663afb9bSAndroid Build Coastguard Worker You can use this function on a pending or a non-pending event to make it 1280*663afb9bSAndroid Build Coastguard Worker active, so that its callback will be run by event_base_dispatch() or 1281*663afb9bSAndroid Build Coastguard Worker event_base_loop(). 1282*663afb9bSAndroid Build Coastguard Worker 1283*663afb9bSAndroid Build Coastguard Worker One common use in multithreaded programs is to wake the thread running 1284*663afb9bSAndroid Build Coastguard Worker event_base_loop() from another thread. 1285*663afb9bSAndroid Build Coastguard Worker 1286*663afb9bSAndroid Build Coastguard Worker @param ev an event to make active. 1287*663afb9bSAndroid Build Coastguard Worker @param res a set of flags to pass to the event's callback. 1288*663afb9bSAndroid Build Coastguard Worker @param ncalls an obsolete argument: this is ignored. 1289*663afb9bSAndroid Build Coastguard Worker **/ 1290*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1291*663afb9bSAndroid Build Coastguard Worker void event_active(struct event *ev, int res, short ncalls); 1292*663afb9bSAndroid Build Coastguard Worker 1293*663afb9bSAndroid Build Coastguard Worker /** 1294*663afb9bSAndroid Build Coastguard Worker Checks if a specific event is pending or scheduled. 1295*663afb9bSAndroid Build Coastguard Worker 1296*663afb9bSAndroid Build Coastguard Worker @param ev an event struct previously passed to event_add() 1297*663afb9bSAndroid Build Coastguard Worker @param events the requested event type; any of EV_TIMEOUT|EV_READ| 1298*663afb9bSAndroid Build Coastguard Worker EV_WRITE|EV_SIGNAL 1299*663afb9bSAndroid Build Coastguard Worker @param tv if this field is not NULL, and the event has a timeout, 1300*663afb9bSAndroid Build Coastguard Worker this field is set to hold the time at which the timeout will 1301*663afb9bSAndroid Build Coastguard Worker expire. 1302*663afb9bSAndroid Build Coastguard Worker 1303*663afb9bSAndroid Build Coastguard Worker @return true if the event is pending on any of the events in 'what', (that 1304*663afb9bSAndroid Build Coastguard Worker is to say, it has been added), or 0 if the event is not added. 1305*663afb9bSAndroid Build Coastguard Worker */ 1306*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1307*663afb9bSAndroid Build Coastguard Worker int event_pending(const struct event *ev, short events, struct timeval *tv); 1308*663afb9bSAndroid Build Coastguard Worker 1309*663afb9bSAndroid Build Coastguard Worker /** 1310*663afb9bSAndroid Build Coastguard Worker If called from within the callback for an event, returns that event. 1311*663afb9bSAndroid Build Coastguard Worker 1312*663afb9bSAndroid Build Coastguard Worker The behavior of this function is not defined when called from outside the 1313*663afb9bSAndroid Build Coastguard Worker callback function for an event. 1314*663afb9bSAndroid Build Coastguard Worker */ 1315*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1316*663afb9bSAndroid Build Coastguard Worker struct event *event_base_get_running_event(struct event_base *base); 1317*663afb9bSAndroid Build Coastguard Worker 1318*663afb9bSAndroid Build Coastguard Worker /** 1319*663afb9bSAndroid Build Coastguard Worker Test if an event structure might be initialized. 1320*663afb9bSAndroid Build Coastguard Worker 1321*663afb9bSAndroid Build Coastguard Worker The event_initialized() function can be used to check if an event has been 1322*663afb9bSAndroid Build Coastguard Worker initialized. 1323*663afb9bSAndroid Build Coastguard Worker 1324*663afb9bSAndroid Build Coastguard Worker Warning: This function is only useful for distinguishing a zeroed-out 1325*663afb9bSAndroid Build Coastguard Worker piece of memory from an initialized event, it can easily be confused by 1326*663afb9bSAndroid Build Coastguard Worker uninitialized memory. Thus, it should ONLY be used to distinguish an 1327*663afb9bSAndroid Build Coastguard Worker initialized event from zero. 1328*663afb9bSAndroid Build Coastguard Worker 1329*663afb9bSAndroid Build Coastguard Worker @param ev an event structure to be tested 1330*663afb9bSAndroid Build Coastguard Worker @return 1 if the structure might be initialized, or 0 if it has not been 1331*663afb9bSAndroid Build Coastguard Worker initialized 1332*663afb9bSAndroid Build Coastguard Worker */ 1333*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1334*663afb9bSAndroid Build Coastguard Worker int event_initialized(const struct event *ev); 1335*663afb9bSAndroid Build Coastguard Worker 1336*663afb9bSAndroid Build Coastguard Worker /** 1337*663afb9bSAndroid Build Coastguard Worker Get the signal number assigned to a signal event 1338*663afb9bSAndroid Build Coastguard Worker */ 1339*663afb9bSAndroid Build Coastguard Worker #define event_get_signal(ev) ((int)event_get_fd(ev)) 1340*663afb9bSAndroid Build Coastguard Worker 1341*663afb9bSAndroid Build Coastguard Worker /** 1342*663afb9bSAndroid Build Coastguard Worker Get the socket or signal assigned to an event, or -1 if the event has 1343*663afb9bSAndroid Build Coastguard Worker no socket. 1344*663afb9bSAndroid Build Coastguard Worker */ 1345*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1346*663afb9bSAndroid Build Coastguard Worker evutil_socket_t event_get_fd(const struct event *ev); 1347*663afb9bSAndroid Build Coastguard Worker 1348*663afb9bSAndroid Build Coastguard Worker /** 1349*663afb9bSAndroid Build Coastguard Worker Get the event_base associated with an event. 1350*663afb9bSAndroid Build Coastguard Worker */ 1351*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1352*663afb9bSAndroid Build Coastguard Worker struct event_base *event_get_base(const struct event *ev); 1353*663afb9bSAndroid Build Coastguard Worker 1354*663afb9bSAndroid Build Coastguard Worker /** 1355*663afb9bSAndroid Build Coastguard Worker Return the events (EV_READ, EV_WRITE, etc) assigned to an event. 1356*663afb9bSAndroid Build Coastguard Worker */ 1357*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1358*663afb9bSAndroid Build Coastguard Worker short event_get_events(const struct event *ev); 1359*663afb9bSAndroid Build Coastguard Worker 1360*663afb9bSAndroid Build Coastguard Worker /** 1361*663afb9bSAndroid Build Coastguard Worker Return the callback assigned to an event. 1362*663afb9bSAndroid Build Coastguard Worker */ 1363*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1364*663afb9bSAndroid Build Coastguard Worker event_callback_fn event_get_callback(const struct event *ev); 1365*663afb9bSAndroid Build Coastguard Worker 1366*663afb9bSAndroid Build Coastguard Worker /** 1367*663afb9bSAndroid Build Coastguard Worker Return the callback argument assigned to an event. 1368*663afb9bSAndroid Build Coastguard Worker */ 1369*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1370*663afb9bSAndroid Build Coastguard Worker void *event_get_callback_arg(const struct event *ev); 1371*663afb9bSAndroid Build Coastguard Worker 1372*663afb9bSAndroid Build Coastguard Worker /** 1373*663afb9bSAndroid Build Coastguard Worker Return the priority of an event. 1374*663afb9bSAndroid Build Coastguard Worker @see event_priority_init(), event_get_priority() 1375*663afb9bSAndroid Build Coastguard Worker */ 1376*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1377*663afb9bSAndroid Build Coastguard Worker int event_get_priority(const struct event *ev); 1378*663afb9bSAndroid Build Coastguard Worker 1379*663afb9bSAndroid Build Coastguard Worker /** 1380*663afb9bSAndroid Build Coastguard Worker Extract _all_ of arguments given to construct a given event. The 1381*663afb9bSAndroid Build Coastguard Worker event_base is copied into *base_out, the fd is copied into *fd_out, and so 1382*663afb9bSAndroid Build Coastguard Worker on. 1383*663afb9bSAndroid Build Coastguard Worker 1384*663afb9bSAndroid Build Coastguard Worker If any of the "_out" arguments is NULL, it will be ignored. 1385*663afb9bSAndroid Build Coastguard Worker */ 1386*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1387*663afb9bSAndroid Build Coastguard Worker void event_get_assignment(const struct event *event, 1388*663afb9bSAndroid Build Coastguard Worker struct event_base **base_out, evutil_socket_t *fd_out, short *events_out, 1389*663afb9bSAndroid Build Coastguard Worker event_callback_fn *callback_out, void **arg_out); 1390*663afb9bSAndroid Build Coastguard Worker 1391*663afb9bSAndroid Build Coastguard Worker /** 1392*663afb9bSAndroid Build Coastguard Worker Return the size of struct event that the Libevent library was compiled 1393*663afb9bSAndroid Build Coastguard Worker with. 1394*663afb9bSAndroid Build Coastguard Worker 1395*663afb9bSAndroid Build Coastguard Worker This will be NO GREATER than sizeof(struct event) if you're running with 1396*663afb9bSAndroid Build Coastguard Worker the same version of Libevent that your application was built with, but 1397*663afb9bSAndroid Build Coastguard Worker otherwise might not. 1398*663afb9bSAndroid Build Coastguard Worker 1399*663afb9bSAndroid Build Coastguard Worker Note that it might be SMALLER than sizeof(struct event) if some future 1400*663afb9bSAndroid Build Coastguard Worker version of Libevent adds extra padding to the end of struct event. 1401*663afb9bSAndroid Build Coastguard Worker We might do this to help ensure ABI-compatibility between different 1402*663afb9bSAndroid Build Coastguard Worker versions of Libevent. 1403*663afb9bSAndroid Build Coastguard Worker */ 1404*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1405*663afb9bSAndroid Build Coastguard Worker size_t event_get_struct_event_size(void); 1406*663afb9bSAndroid Build Coastguard Worker 1407*663afb9bSAndroid Build Coastguard Worker /** 1408*663afb9bSAndroid Build Coastguard Worker Get the Libevent version. 1409*663afb9bSAndroid Build Coastguard Worker 1410*663afb9bSAndroid Build Coastguard Worker Note that this will give you the version of the library that you're 1411*663afb9bSAndroid Build Coastguard Worker currently linked against, not the version of the headers that you've 1412*663afb9bSAndroid Build Coastguard Worker compiled against. 1413*663afb9bSAndroid Build Coastguard Worker 1414*663afb9bSAndroid Build Coastguard Worker @return a string containing the version number of Libevent 1415*663afb9bSAndroid Build Coastguard Worker */ 1416*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1417*663afb9bSAndroid Build Coastguard Worker const char *event_get_version(void); 1418*663afb9bSAndroid Build Coastguard Worker 1419*663afb9bSAndroid Build Coastguard Worker /** 1420*663afb9bSAndroid Build Coastguard Worker Return a numeric representation of Libevent's version. 1421*663afb9bSAndroid Build Coastguard Worker 1422*663afb9bSAndroid Build Coastguard Worker Note that this will give you the version of the library that you're 1423*663afb9bSAndroid Build Coastguard Worker currently linked against, not the version of the headers you've used to 1424*663afb9bSAndroid Build Coastguard Worker compile. 1425*663afb9bSAndroid Build Coastguard Worker 1426*663afb9bSAndroid Build Coastguard Worker The format uses one byte each for the major, minor, and patchlevel parts of 1427*663afb9bSAndroid Build Coastguard Worker the version number. The low-order byte is unused. For example, version 1428*663afb9bSAndroid Build Coastguard Worker 2.0.1-alpha has a numeric representation of 0x02000100 1429*663afb9bSAndroid Build Coastguard Worker */ 1430*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1431*663afb9bSAndroid Build Coastguard Worker ev_uint32_t event_get_version_number(void); 1432*663afb9bSAndroid Build Coastguard Worker 1433*663afb9bSAndroid Build Coastguard Worker /** As event_get_version, but gives the version of Libevent's headers. */ 1434*663afb9bSAndroid Build Coastguard Worker #define LIBEVENT_VERSION EVENT__VERSION 1435*663afb9bSAndroid Build Coastguard Worker /** As event_get_version_number, but gives the version number of Libevent's 1436*663afb9bSAndroid Build Coastguard Worker * headers. */ 1437*663afb9bSAndroid Build Coastguard Worker #define LIBEVENT_VERSION_NUMBER EVENT__NUMERIC_VERSION 1438*663afb9bSAndroid Build Coastguard Worker 1439*663afb9bSAndroid Build Coastguard Worker /** Largest number of priorities that Libevent can support. */ 1440*663afb9bSAndroid Build Coastguard Worker #define EVENT_MAX_PRIORITIES 256 1441*663afb9bSAndroid Build Coastguard Worker /** 1442*663afb9bSAndroid Build Coastguard Worker Set the number of different event priorities 1443*663afb9bSAndroid Build Coastguard Worker 1444*663afb9bSAndroid Build Coastguard Worker By default Libevent schedules all active events with the same priority. 1445*663afb9bSAndroid Build Coastguard Worker However, some time it is desirable to process some events with a higher 1446*663afb9bSAndroid Build Coastguard Worker priority than others. For that reason, Libevent supports strict priority 1447*663afb9bSAndroid Build Coastguard Worker queues. Active events with a lower priority are always processed before 1448*663afb9bSAndroid Build Coastguard Worker events with a higher priority. 1449*663afb9bSAndroid Build Coastguard Worker 1450*663afb9bSAndroid Build Coastguard Worker The number of different priorities can be set initially with the 1451*663afb9bSAndroid Build Coastguard Worker event_base_priority_init() function. This function should be called 1452*663afb9bSAndroid Build Coastguard Worker before the first call to event_base_dispatch(). The 1453*663afb9bSAndroid Build Coastguard Worker event_priority_set() function can be used to assign a priority to an 1454*663afb9bSAndroid Build Coastguard Worker event. By default, Libevent assigns the middle priority to all events 1455*663afb9bSAndroid Build Coastguard Worker unless their priority is explicitly set. 1456*663afb9bSAndroid Build Coastguard Worker 1457*663afb9bSAndroid Build Coastguard Worker Note that urgent-priority events can starve less-urgent events: after 1458*663afb9bSAndroid Build Coastguard Worker running all urgent-priority callbacks, Libevent checks for more urgent 1459*663afb9bSAndroid Build Coastguard Worker events again, before running less-urgent events. Less-urgent events 1460*663afb9bSAndroid Build Coastguard Worker will not have their callbacks run until there are no events more urgent 1461*663afb9bSAndroid Build Coastguard Worker than them that want to be active. 1462*663afb9bSAndroid Build Coastguard Worker 1463*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_base_new() 1464*663afb9bSAndroid Build Coastguard Worker @param npriorities the maximum number of priorities 1465*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 1466*663afb9bSAndroid Build Coastguard Worker @see event_priority_set() 1467*663afb9bSAndroid Build Coastguard Worker */ 1468*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1469*663afb9bSAndroid Build Coastguard Worker int event_base_priority_init(struct event_base *, int); 1470*663afb9bSAndroid Build Coastguard Worker 1471*663afb9bSAndroid Build Coastguard Worker /** 1472*663afb9bSAndroid Build Coastguard Worker Get the number of different event priorities. 1473*663afb9bSAndroid Build Coastguard Worker 1474*663afb9bSAndroid Build Coastguard Worker @param eb the event_base structure returned by event_base_new() 1475*663afb9bSAndroid Build Coastguard Worker @return Number of different event priorities 1476*663afb9bSAndroid Build Coastguard Worker @see event_base_priority_init() 1477*663afb9bSAndroid Build Coastguard Worker */ 1478*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1479*663afb9bSAndroid Build Coastguard Worker int event_base_get_npriorities(struct event_base *eb); 1480*663afb9bSAndroid Build Coastguard Worker 1481*663afb9bSAndroid Build Coastguard Worker /** 1482*663afb9bSAndroid Build Coastguard Worker Assign a priority to an event. 1483*663afb9bSAndroid Build Coastguard Worker 1484*663afb9bSAndroid Build Coastguard Worker @param ev an event struct 1485*663afb9bSAndroid Build Coastguard Worker @param priority the new priority to be assigned 1486*663afb9bSAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 1487*663afb9bSAndroid Build Coastguard Worker @see event_priority_init(), event_get_priority() 1488*663afb9bSAndroid Build Coastguard Worker */ 1489*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1490*663afb9bSAndroid Build Coastguard Worker int event_priority_set(struct event *, int); 1491*663afb9bSAndroid Build Coastguard Worker 1492*663afb9bSAndroid Build Coastguard Worker /** 1493*663afb9bSAndroid Build Coastguard Worker Prepare an event_base to use a large number of timeouts with the same 1494*663afb9bSAndroid Build Coastguard Worker duration. 1495*663afb9bSAndroid Build Coastguard Worker 1496*663afb9bSAndroid Build Coastguard Worker Libevent's default scheduling algorithm is optimized for having a large 1497*663afb9bSAndroid Build Coastguard Worker number of timeouts with their durations more or less randomly 1498*663afb9bSAndroid Build Coastguard Worker distributed. But if you have a large number of timeouts that all have 1499*663afb9bSAndroid Build Coastguard Worker the same duration (for example, if you have a large number of 1500*663afb9bSAndroid Build Coastguard Worker connections that all have a 10-second timeout), then you can improve 1501*663afb9bSAndroid Build Coastguard Worker Libevent's performance by telling Libevent about it. 1502*663afb9bSAndroid Build Coastguard Worker 1503*663afb9bSAndroid Build Coastguard Worker To do this, call this function with the common duration. It will return a 1504*663afb9bSAndroid Build Coastguard Worker pointer to a different, opaque timeout value. (Don't depend on its actual 1505*663afb9bSAndroid Build Coastguard Worker contents!) When you use this timeout value in event_add(), Libevent will 1506*663afb9bSAndroid Build Coastguard Worker schedule the event more efficiently. 1507*663afb9bSAndroid Build Coastguard Worker 1508*663afb9bSAndroid Build Coastguard Worker (This optimization probably will not be worthwhile until you have thousands 1509*663afb9bSAndroid Build Coastguard Worker or tens of thousands of events with the same timeout.) 1510*663afb9bSAndroid Build Coastguard Worker */ 1511*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1512*663afb9bSAndroid Build Coastguard Worker const struct timeval *event_base_init_common_timeout(struct event_base *base, 1513*663afb9bSAndroid Build Coastguard Worker const struct timeval *duration); 1514*663afb9bSAndroid Build Coastguard Worker 1515*663afb9bSAndroid Build Coastguard Worker #if !defined(EVENT__DISABLE_MM_REPLACEMENT) || defined(EVENT_IN_DOXYGEN_) 1516*663afb9bSAndroid Build Coastguard Worker /** 1517*663afb9bSAndroid Build Coastguard Worker Override the functions that Libevent uses for memory management. 1518*663afb9bSAndroid Build Coastguard Worker 1519*663afb9bSAndroid Build Coastguard Worker Usually, Libevent uses the standard libc functions malloc, realloc, and 1520*663afb9bSAndroid Build Coastguard Worker free to allocate memory. Passing replacements for those functions to 1521*663afb9bSAndroid Build Coastguard Worker event_set_mem_functions() overrides this behavior. 1522*663afb9bSAndroid Build Coastguard Worker 1523*663afb9bSAndroid Build Coastguard Worker Note that all memory returned from Libevent will be allocated by the 1524*663afb9bSAndroid Build Coastguard Worker replacement functions rather than by malloc() and realloc(). Thus, if you 1525*663afb9bSAndroid Build Coastguard Worker have replaced those functions, it will not be appropriate to free() memory 1526*663afb9bSAndroid Build Coastguard Worker that you get from Libevent. Instead, you must use the free_fn replacement 1527*663afb9bSAndroid Build Coastguard Worker that you provided. 1528*663afb9bSAndroid Build Coastguard Worker 1529*663afb9bSAndroid Build Coastguard Worker Note also that if you are going to call this function, you should do so 1530*663afb9bSAndroid Build Coastguard Worker before any call to any Libevent function that does allocation. 1531*663afb9bSAndroid Build Coastguard Worker Otherwise, those functions will allocate their memory using malloc(), but 1532*663afb9bSAndroid Build Coastguard Worker then later free it using your provided free_fn. 1533*663afb9bSAndroid Build Coastguard Worker 1534*663afb9bSAndroid Build Coastguard Worker @param malloc_fn A replacement for malloc. 1535*663afb9bSAndroid Build Coastguard Worker @param realloc_fn A replacement for realloc 1536*663afb9bSAndroid Build Coastguard Worker @param free_fn A replacement for free. 1537*663afb9bSAndroid Build Coastguard Worker **/ 1538*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1539*663afb9bSAndroid Build Coastguard Worker void event_set_mem_functions( 1540*663afb9bSAndroid Build Coastguard Worker void *(*malloc_fn)(size_t sz), 1541*663afb9bSAndroid Build Coastguard Worker void *(*realloc_fn)(void *ptr, size_t sz), 1542*663afb9bSAndroid Build Coastguard Worker void (*free_fn)(void *ptr)); 1543*663afb9bSAndroid Build Coastguard Worker /** This definition is present if Libevent was built with support for 1544*663afb9bSAndroid Build Coastguard Worker event_set_mem_functions() */ 1545*663afb9bSAndroid Build Coastguard Worker #define EVENT_SET_MEM_FUNCTIONS_IMPLEMENTED 1546*663afb9bSAndroid Build Coastguard Worker #endif 1547*663afb9bSAndroid Build Coastguard Worker 1548*663afb9bSAndroid Build Coastguard Worker /** 1549*663afb9bSAndroid Build Coastguard Worker Writes a human-readable description of all inserted and/or active 1550*663afb9bSAndroid Build Coastguard Worker events to a provided stdio stream. 1551*663afb9bSAndroid Build Coastguard Worker 1552*663afb9bSAndroid Build Coastguard Worker This is intended for debugging; its format is not guaranteed to be the same 1553*663afb9bSAndroid Build Coastguard Worker between libevent versions. 1554*663afb9bSAndroid Build Coastguard Worker 1555*663afb9bSAndroid Build Coastguard Worker @param base An event_base on which to scan the events. 1556*663afb9bSAndroid Build Coastguard Worker @param output A stdio file to write on. 1557*663afb9bSAndroid Build Coastguard Worker */ 1558*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1559*663afb9bSAndroid Build Coastguard Worker void event_base_dump_events(struct event_base *, FILE *); 1560*663afb9bSAndroid Build Coastguard Worker 1561*663afb9bSAndroid Build Coastguard Worker 1562*663afb9bSAndroid Build Coastguard Worker /** 1563*663afb9bSAndroid Build Coastguard Worker Activates all pending events for the given fd and event mask. 1564*663afb9bSAndroid Build Coastguard Worker 1565*663afb9bSAndroid Build Coastguard Worker This function activates pending events only. Events which have not been 1566*663afb9bSAndroid Build Coastguard Worker added will not become active. 1567*663afb9bSAndroid Build Coastguard Worker 1568*663afb9bSAndroid Build Coastguard Worker @param base the event_base on which to activate the events. 1569*663afb9bSAndroid Build Coastguard Worker @param fd An fd to active events on. 1570*663afb9bSAndroid Build Coastguard Worker @param events One or more of EV_{READ,WRITE,TIMEOUT}. 1571*663afb9bSAndroid Build Coastguard Worker */ 1572*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1573*663afb9bSAndroid Build Coastguard Worker void event_base_active_by_fd(struct event_base *base, evutil_socket_t fd, short events); 1574*663afb9bSAndroid Build Coastguard Worker 1575*663afb9bSAndroid Build Coastguard Worker /** 1576*663afb9bSAndroid Build Coastguard Worker Activates all pending signals with a given signal number 1577*663afb9bSAndroid Build Coastguard Worker 1578*663afb9bSAndroid Build Coastguard Worker This function activates pending events only. Events which have not been 1579*663afb9bSAndroid Build Coastguard Worker added will not become active. 1580*663afb9bSAndroid Build Coastguard Worker 1581*663afb9bSAndroid Build Coastguard Worker @param base the event_base on which to activate the events. 1582*663afb9bSAndroid Build Coastguard Worker @param fd The signal to active events on. 1583*663afb9bSAndroid Build Coastguard Worker */ 1584*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1585*663afb9bSAndroid Build Coastguard Worker void event_base_active_by_signal(struct event_base *base, int sig); 1586*663afb9bSAndroid Build Coastguard Worker 1587*663afb9bSAndroid Build Coastguard Worker /** 1588*663afb9bSAndroid Build Coastguard Worker * Callback for iterating events in an event base via event_base_foreach_event 1589*663afb9bSAndroid Build Coastguard Worker */ 1590*663afb9bSAndroid Build Coastguard Worker typedef int (*event_base_foreach_event_cb)(const struct event_base *, const struct event *, void *); 1591*663afb9bSAndroid Build Coastguard Worker 1592*663afb9bSAndroid Build Coastguard Worker /** 1593*663afb9bSAndroid Build Coastguard Worker Iterate over all added or active events events in an event loop, and invoke 1594*663afb9bSAndroid Build Coastguard Worker a given callback on each one. 1595*663afb9bSAndroid Build Coastguard Worker 1596*663afb9bSAndroid Build Coastguard Worker The callback must not call any function that modifies the event base, that 1597*663afb9bSAndroid Build Coastguard Worker modifies any event in the event base, or that adds or removes any event to 1598*663afb9bSAndroid Build Coastguard Worker the event base. Doing so is unsupported and will lead to undefined 1599*663afb9bSAndroid Build Coastguard Worker behavior -- likely, to crashes. 1600*663afb9bSAndroid Build Coastguard Worker 1601*663afb9bSAndroid Build Coastguard Worker event_base_foreach_event() holds a lock on the event_base() for the whole 1602*663afb9bSAndroid Build Coastguard Worker time it's running: slow callbacks are not advisable. 1603*663afb9bSAndroid Build Coastguard Worker 1604*663afb9bSAndroid Build Coastguard Worker Note that Libevent adds some events of its own to make pieces of its 1605*663afb9bSAndroid Build Coastguard Worker functionality work. You must not assume that the only events you'll 1606*663afb9bSAndroid Build Coastguard Worker encounter will be the ones you added yourself. 1607*663afb9bSAndroid Build Coastguard Worker 1608*663afb9bSAndroid Build Coastguard Worker The callback function must return 0 to continue iteration, or some other 1609*663afb9bSAndroid Build Coastguard Worker integer to stop iterating. 1610*663afb9bSAndroid Build Coastguard Worker 1611*663afb9bSAndroid Build Coastguard Worker @param base An event_base on which to scan the events. 1612*663afb9bSAndroid Build Coastguard Worker @param fn A callback function to receive the events. 1613*663afb9bSAndroid Build Coastguard Worker @param arg An argument passed to the callback function. 1614*663afb9bSAndroid Build Coastguard Worker @return 0 if we iterated over every event, or the value returned by the 1615*663afb9bSAndroid Build Coastguard Worker callback function if the loop exited early. 1616*663afb9bSAndroid Build Coastguard Worker */ 1617*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1618*663afb9bSAndroid Build Coastguard Worker int event_base_foreach_event(struct event_base *base, event_base_foreach_event_cb fn, void *arg); 1619*663afb9bSAndroid Build Coastguard Worker 1620*663afb9bSAndroid Build Coastguard Worker 1621*663afb9bSAndroid Build Coastguard Worker /** Sets 'tv' to the current time (as returned by gettimeofday()), 1622*663afb9bSAndroid Build Coastguard Worker looking at the cached value in 'base' if possible, and calling 1623*663afb9bSAndroid Build Coastguard Worker gettimeofday() or clock_gettime() as appropriate if there is no 1624*663afb9bSAndroid Build Coastguard Worker cached time. 1625*663afb9bSAndroid Build Coastguard Worker 1626*663afb9bSAndroid Build Coastguard Worker Generally, this value will only be cached while actually 1627*663afb9bSAndroid Build Coastguard Worker processing event callbacks, and may be very inaccurate if your 1628*663afb9bSAndroid Build Coastguard Worker callbacks take a long time to execute. 1629*663afb9bSAndroid Build Coastguard Worker 1630*663afb9bSAndroid Build Coastguard Worker Returns 0 on success, negative on failure. 1631*663afb9bSAndroid Build Coastguard Worker */ 1632*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1633*663afb9bSAndroid Build Coastguard Worker int event_base_gettimeofday_cached(struct event_base *base, 1634*663afb9bSAndroid Build Coastguard Worker struct timeval *tv); 1635*663afb9bSAndroid Build Coastguard Worker 1636*663afb9bSAndroid Build Coastguard Worker /** Update cached_tv in the 'base' to the current time 1637*663afb9bSAndroid Build Coastguard Worker * 1638*663afb9bSAndroid Build Coastguard Worker * You can use this function is useful for selectively increasing 1639*663afb9bSAndroid Build Coastguard Worker * the accuracy of the cached time value in 'base' during callbacks 1640*663afb9bSAndroid Build Coastguard Worker * that take a long time to execute. 1641*663afb9bSAndroid Build Coastguard Worker * 1642*663afb9bSAndroid Build Coastguard Worker * This function has no effect if the base is currently not in its 1643*663afb9bSAndroid Build Coastguard Worker * event loop, or if timeval caching is disabled via 1644*663afb9bSAndroid Build Coastguard Worker * EVENT_BASE_FLAG_NO_CACHE_TIME. 1645*663afb9bSAndroid Build Coastguard Worker * 1646*663afb9bSAndroid Build Coastguard Worker * @return 0 on success, -1 on failure 1647*663afb9bSAndroid Build Coastguard Worker */ 1648*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1649*663afb9bSAndroid Build Coastguard Worker int event_base_update_cache_time(struct event_base *base); 1650*663afb9bSAndroid Build Coastguard Worker 1651*663afb9bSAndroid Build Coastguard Worker /** Release up all globally-allocated resources allocated by Libevent. 1652*663afb9bSAndroid Build Coastguard Worker 1653*663afb9bSAndroid Build Coastguard Worker This function does not free developer-controlled resources like 1654*663afb9bSAndroid Build Coastguard Worker event_bases, events, bufferevents, listeners, and so on. It only releases 1655*663afb9bSAndroid Build Coastguard Worker resources like global locks that there is no other way to free. 1656*663afb9bSAndroid Build Coastguard Worker 1657*663afb9bSAndroid Build Coastguard Worker It is not actually necessary to call this function before exit: every 1658*663afb9bSAndroid Build Coastguard Worker resource that it frees would be released anyway on exit. It mainly exists 1659*663afb9bSAndroid Build Coastguard Worker so that resource-leak debugging tools don't see Libevent as holding 1660*663afb9bSAndroid Build Coastguard Worker resources at exit. 1661*663afb9bSAndroid Build Coastguard Worker 1662*663afb9bSAndroid Build Coastguard Worker You should only call this function when no other Libevent functions will 1663*663afb9bSAndroid Build Coastguard Worker be invoked -- e.g., when cleanly exiting a program. 1664*663afb9bSAndroid Build Coastguard Worker */ 1665*663afb9bSAndroid Build Coastguard Worker EVENT2_EXPORT_SYMBOL 1666*663afb9bSAndroid Build Coastguard Worker void libevent_global_shutdown(void); 1667*663afb9bSAndroid Build Coastguard Worker 1668*663afb9bSAndroid Build Coastguard Worker #ifdef __cplusplus 1669*663afb9bSAndroid Build Coastguard Worker } 1670*663afb9bSAndroid Build Coastguard Worker #endif 1671*663afb9bSAndroid Build Coastguard Worker 1672*663afb9bSAndroid Build Coastguard Worker #endif /* EVENT2_EVENT_H_INCLUDED_ */ 1673