1*6777b538SAndroid Build Coastguard Worker /* 2*6777b538SAndroid Build Coastguard Worker * Copyright (c) 2000-2007 Niels Provos <[email protected]> 3*6777b538SAndroid Build Coastguard Worker * All rights reserved. 4*6777b538SAndroid Build Coastguard Worker * 5*6777b538SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*6777b538SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*6777b538SAndroid Build Coastguard Worker * are met: 8*6777b538SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 9*6777b538SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 10*6777b538SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 11*6777b538SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 12*6777b538SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 13*6777b538SAndroid Build Coastguard Worker * 3. The name of the author may not be used to endorse or promote products 14*6777b538SAndroid Build Coastguard Worker * derived from this software without specific prior written permission. 15*6777b538SAndroid Build Coastguard Worker * 16*6777b538SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17*6777b538SAndroid Build Coastguard Worker * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18*6777b538SAndroid Build Coastguard Worker * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19*6777b538SAndroid Build Coastguard Worker * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20*6777b538SAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21*6777b538SAndroid Build Coastguard Worker * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22*6777b538SAndroid Build Coastguard Worker * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23*6777b538SAndroid Build Coastguard Worker * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24*6777b538SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25*6777b538SAndroid Build Coastguard Worker * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26*6777b538SAndroid Build Coastguard Worker */ 27*6777b538SAndroid Build Coastguard Worker #ifndef _EVENT_H_ 28*6777b538SAndroid Build Coastguard Worker #define _EVENT_H_ 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker /** @mainpage 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker @section intro Introduction 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker libevent is an event notification library for developing scalable network 35*6777b538SAndroid Build Coastguard Worker servers. The libevent API provides a mechanism to execute a callback 36*6777b538SAndroid Build Coastguard Worker function when a specific event occurs on a file descriptor or after a 37*6777b538SAndroid Build Coastguard Worker timeout has been reached. Furthermore, libevent also support callbacks due 38*6777b538SAndroid Build Coastguard Worker to signals or regular timeouts. 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker libevent is meant to replace the event loop found in event driven network 41*6777b538SAndroid Build Coastguard Worker servers. An application just needs to call event_dispatch() and then add or 42*6777b538SAndroid Build Coastguard Worker remove events dynamically without having to change the event loop. 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker Currently, libevent supports /dev/poll, kqueue(2), select(2), poll(2) and 45*6777b538SAndroid Build Coastguard Worker epoll(4). It also has experimental support for real-time signals. The 46*6777b538SAndroid Build Coastguard Worker internal event mechanism is completely independent of the exposed event API, 47*6777b538SAndroid Build Coastguard Worker and a simple update of libevent can provide new functionality without having 48*6777b538SAndroid Build Coastguard Worker to redesign the applications. As a result, Libevent allows for portable 49*6777b538SAndroid Build Coastguard Worker application development and provides the most scalable event notification 50*6777b538SAndroid Build Coastguard Worker mechanism available on an operating system. Libevent can also be used for 51*6777b538SAndroid Build Coastguard Worker multi-threaded aplications; see Steven Grimm's explanation. Libevent should 52*6777b538SAndroid Build Coastguard Worker compile on Linux, *BSD, Mac OS X, Solaris and Windows. 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker @section usage Standard usage 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker Every program that uses libevent must include the <event.h> header, and pass 57*6777b538SAndroid Build Coastguard Worker the -levent flag to the linker. Before using any of the functions in the 58*6777b538SAndroid Build Coastguard Worker library, you must call event_init() or event_base_new() to perform one-time 59*6777b538SAndroid Build Coastguard Worker initialization of the libevent library. 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker @section event Event notification 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker For each file descriptor that you wish to monitor, you must declare an event 64*6777b538SAndroid Build Coastguard Worker structure and call event_set() to initialize the members of the structure. 65*6777b538SAndroid Build Coastguard Worker To enable notification, you add the structure to the list of monitored 66*6777b538SAndroid Build Coastguard Worker events by calling event_add(). The event structure must remain allocated as 67*6777b538SAndroid Build Coastguard Worker long as it is active, so it should be allocated on the heap. Finally, you 68*6777b538SAndroid Build Coastguard Worker call event_dispatch() to loop and dispatch events. 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker @section bufferevent I/O Buffers 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker libevent provides an abstraction on top of the regular event callbacks. This 73*6777b538SAndroid Build Coastguard Worker abstraction is called a buffered event. A buffered event provides input and 74*6777b538SAndroid Build Coastguard Worker output buffers that get filled and drained automatically. The user of a 75*6777b538SAndroid Build Coastguard Worker buffered event no longer deals directly with the I/O, but instead is reading 76*6777b538SAndroid Build Coastguard Worker from input and writing to output buffers. 77*6777b538SAndroid Build Coastguard Worker 78*6777b538SAndroid Build Coastguard Worker Once initialized via bufferevent_new(), the bufferevent structure can be 79*6777b538SAndroid Build Coastguard Worker used repeatedly with bufferevent_enable() and bufferevent_disable(). 80*6777b538SAndroid Build Coastguard Worker Instead of reading and writing directly to a socket, you would call 81*6777b538SAndroid Build Coastguard Worker bufferevent_read() and bufferevent_write(). 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Worker When read enabled the bufferevent will try to read from the file descriptor 84*6777b538SAndroid Build Coastguard Worker and call the read callback. The write callback is executed whenever the 85*6777b538SAndroid Build Coastguard Worker output buffer is drained below the write low watermark, which is 0 by 86*6777b538SAndroid Build Coastguard Worker default. 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker @section timers Timers 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker libevent can also be used to create timers that invoke a callback after a 91*6777b538SAndroid Build Coastguard Worker certain amount of time has expired. The evtimer_set() function prepares an 92*6777b538SAndroid Build Coastguard Worker event struct to be used as a timer. To activate the timer, call 93*6777b538SAndroid Build Coastguard Worker evtimer_add(). Timers can be deactivated by calling evtimer_del(). 94*6777b538SAndroid Build Coastguard Worker 95*6777b538SAndroid Build Coastguard Worker @section timeouts Timeouts 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard Worker In addition to simple timers, libevent can assign timeout events to file 98*6777b538SAndroid Build Coastguard Worker descriptors that are triggered whenever a certain amount of time has passed 99*6777b538SAndroid Build Coastguard Worker with no activity on a file descriptor. The timeout_set() function 100*6777b538SAndroid Build Coastguard Worker initializes an event struct for use as a timeout. Once initialized, the 101*6777b538SAndroid Build Coastguard Worker event must be activated by using timeout_add(). To cancel the timeout, call 102*6777b538SAndroid Build Coastguard Worker timeout_del(). 103*6777b538SAndroid Build Coastguard Worker 104*6777b538SAndroid Build Coastguard Worker @section evdns Asynchronous DNS resolution 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard Worker libevent provides an asynchronous DNS resolver that should be used instead 107*6777b538SAndroid Build Coastguard Worker of the standard DNS resolver functions. These functions can be imported by 108*6777b538SAndroid Build Coastguard Worker including the <evdns.h> header in your program. Before using any of the 109*6777b538SAndroid Build Coastguard Worker resolver functions, you must call evdns_init() to initialize the library. To 110*6777b538SAndroid Build Coastguard Worker convert a hostname to an IP address, you call the evdns_resolve_ipv4() 111*6777b538SAndroid Build Coastguard Worker function. To perform a reverse lookup, you would call the 112*6777b538SAndroid Build Coastguard Worker evdns_resolve_reverse() function. All of these functions use callbacks to 113*6777b538SAndroid Build Coastguard Worker avoid blocking while the lookup is performed. 114*6777b538SAndroid Build Coastguard Worker 115*6777b538SAndroid Build Coastguard Worker @section evhttp Event-driven HTTP servers 116*6777b538SAndroid Build Coastguard Worker 117*6777b538SAndroid Build Coastguard Worker libevent provides a very simple event-driven HTTP server that can be 118*6777b538SAndroid Build Coastguard Worker embedded in your program and used to service HTTP requests. 119*6777b538SAndroid Build Coastguard Worker 120*6777b538SAndroid Build Coastguard Worker To use this capability, you need to include the <evhttp.h> header in your 121*6777b538SAndroid Build Coastguard Worker program. You create the server by calling evhttp_new(). Add addresses and 122*6777b538SAndroid Build Coastguard Worker ports to listen on with evhttp_bind_socket(). You then register one or more 123*6777b538SAndroid Build Coastguard Worker callbacks to handle incoming requests. Each URI can be assigned a callback 124*6777b538SAndroid Build Coastguard Worker via the evhttp_set_cb() function. A generic callback function can also be 125*6777b538SAndroid Build Coastguard Worker registered via evhttp_set_gencb(); this callback will be invoked if no other 126*6777b538SAndroid Build Coastguard Worker callbacks have been registered for a given URI. 127*6777b538SAndroid Build Coastguard Worker 128*6777b538SAndroid Build Coastguard Worker @section evrpc A framework for RPC servers and clients 129*6777b538SAndroid Build Coastguard Worker 130*6777b538SAndroid Build Coastguard Worker libevents provides a framework for creating RPC servers and clients. It 131*6777b538SAndroid Build Coastguard Worker takes care of marshaling and unmarshaling all data structures. 132*6777b538SAndroid Build Coastguard Worker 133*6777b538SAndroid Build Coastguard Worker @section api API Reference 134*6777b538SAndroid Build Coastguard Worker 135*6777b538SAndroid Build Coastguard Worker To browse the complete documentation of the libevent API, click on any of 136*6777b538SAndroid Build Coastguard Worker the following links. 137*6777b538SAndroid Build Coastguard Worker 138*6777b538SAndroid Build Coastguard Worker event.h 139*6777b538SAndroid Build Coastguard Worker The primary libevent header 140*6777b538SAndroid Build Coastguard Worker 141*6777b538SAndroid Build Coastguard Worker evdns.h 142*6777b538SAndroid Build Coastguard Worker Asynchronous DNS resolution 143*6777b538SAndroid Build Coastguard Worker 144*6777b538SAndroid Build Coastguard Worker evhttp.h 145*6777b538SAndroid Build Coastguard Worker An embedded libevent-based HTTP server 146*6777b538SAndroid Build Coastguard Worker 147*6777b538SAndroid Build Coastguard Worker evrpc.h 148*6777b538SAndroid Build Coastguard Worker A framework for creating RPC servers and clients 149*6777b538SAndroid Build Coastguard Worker 150*6777b538SAndroid Build Coastguard Worker */ 151*6777b538SAndroid Build Coastguard Worker 152*6777b538SAndroid Build Coastguard Worker /** @file event.h 153*6777b538SAndroid Build Coastguard Worker 154*6777b538SAndroid Build Coastguard Worker A library for writing event-driven network servers 155*6777b538SAndroid Build Coastguard Worker 156*6777b538SAndroid Build Coastguard Worker */ 157*6777b538SAndroid Build Coastguard Worker 158*6777b538SAndroid Build Coastguard Worker #ifdef __cplusplus 159*6777b538SAndroid Build Coastguard Worker extern "C" { 160*6777b538SAndroid Build Coastguard Worker #endif 161*6777b538SAndroid Build Coastguard Worker 162*6777b538SAndroid Build Coastguard Worker #include "event-config.h" 163*6777b538SAndroid Build Coastguard Worker #ifdef _EVENT_HAVE_SYS_TYPES_H 164*6777b538SAndroid Build Coastguard Worker #include <sys/types.h> 165*6777b538SAndroid Build Coastguard Worker #endif 166*6777b538SAndroid Build Coastguard Worker #ifdef _EVENT_HAVE_SYS_TIME_H 167*6777b538SAndroid Build Coastguard Worker #include <sys/time.h> 168*6777b538SAndroid Build Coastguard Worker #endif 169*6777b538SAndroid Build Coastguard Worker #ifdef _EVENT_HAVE_STDINT_H 170*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 171*6777b538SAndroid Build Coastguard Worker #endif 172*6777b538SAndroid Build Coastguard Worker #include <stdarg.h> 173*6777b538SAndroid Build Coastguard Worker 174*6777b538SAndroid Build Coastguard Worker /* For int types. */ 175*6777b538SAndroid Build Coastguard Worker #include "evutil.h" 176*6777b538SAndroid Build Coastguard Worker 177*6777b538SAndroid Build Coastguard Worker #ifdef WIN32 178*6777b538SAndroid Build Coastguard Worker #define WIN32_LEAN_AND_MEAN 179*6777b538SAndroid Build Coastguard Worker #include <windows.h> 180*6777b538SAndroid Build Coastguard Worker #undef WIN32_LEAN_AND_MEAN 181*6777b538SAndroid Build Coastguard Worker typedef unsigned char u_char; 182*6777b538SAndroid Build Coastguard Worker typedef unsigned short u_short; 183*6777b538SAndroid Build Coastguard Worker #endif 184*6777b538SAndroid Build Coastguard Worker 185*6777b538SAndroid Build Coastguard Worker #define EVLIST_TIMEOUT 0x01 186*6777b538SAndroid Build Coastguard Worker #define EVLIST_INSERTED 0x02 187*6777b538SAndroid Build Coastguard Worker #define EVLIST_SIGNAL 0x04 188*6777b538SAndroid Build Coastguard Worker #define EVLIST_ACTIVE 0x08 189*6777b538SAndroid Build Coastguard Worker #define EVLIST_INTERNAL 0x10 190*6777b538SAndroid Build Coastguard Worker #define EVLIST_INIT 0x80 191*6777b538SAndroid Build Coastguard Worker 192*6777b538SAndroid Build Coastguard Worker /* EVLIST_X_ Private space: 0x1000-0xf000 */ 193*6777b538SAndroid Build Coastguard Worker #define EVLIST_ALL (0xf000 | 0x9f) 194*6777b538SAndroid Build Coastguard Worker 195*6777b538SAndroid Build Coastguard Worker #define EV_TIMEOUT 0x01 196*6777b538SAndroid Build Coastguard Worker #define EV_READ 0x02 197*6777b538SAndroid Build Coastguard Worker #define EV_WRITE 0x04 198*6777b538SAndroid Build Coastguard Worker #define EV_SIGNAL 0x08 199*6777b538SAndroid Build Coastguard Worker #define EV_PERSIST 0x10 /* Persistant event */ 200*6777b538SAndroid Build Coastguard Worker 201*6777b538SAndroid Build Coastguard Worker /* Fix so that ppl dont have to run with <sys/queue.h> */ 202*6777b538SAndroid Build Coastguard Worker #ifndef TAILQ_ENTRY 203*6777b538SAndroid Build Coastguard Worker #define _EVENT_DEFINED_TQENTRY 204*6777b538SAndroid Build Coastguard Worker #define TAILQ_ENTRY(type) \ 205*6777b538SAndroid Build Coastguard Worker struct { \ 206*6777b538SAndroid Build Coastguard Worker struct type *tqe_next; /* next element */ \ 207*6777b538SAndroid Build Coastguard Worker struct type **tqe_prev; /* address of previous next element */ \ 208*6777b538SAndroid Build Coastguard Worker } 209*6777b538SAndroid Build Coastguard Worker #endif /* !TAILQ_ENTRY */ 210*6777b538SAndroid Build Coastguard Worker 211*6777b538SAndroid Build Coastguard Worker struct event_base; 212*6777b538SAndroid Build Coastguard Worker #ifndef EVENT_NO_STRUCT 213*6777b538SAndroid Build Coastguard Worker struct event { 214*6777b538SAndroid Build Coastguard Worker TAILQ_ENTRY (event) ev_next; 215*6777b538SAndroid Build Coastguard Worker TAILQ_ENTRY (event) ev_active_next; 216*6777b538SAndroid Build Coastguard Worker TAILQ_ENTRY (event) ev_signal_next; 217*6777b538SAndroid Build Coastguard Worker unsigned int min_heap_idx; /* for managing timeouts */ 218*6777b538SAndroid Build Coastguard Worker 219*6777b538SAndroid Build Coastguard Worker struct event_base *ev_base; 220*6777b538SAndroid Build Coastguard Worker 221*6777b538SAndroid Build Coastguard Worker int ev_fd; 222*6777b538SAndroid Build Coastguard Worker short ev_events; 223*6777b538SAndroid Build Coastguard Worker short ev_ncalls; 224*6777b538SAndroid Build Coastguard Worker short *ev_pncalls; /* Allows deletes in callback */ 225*6777b538SAndroid Build Coastguard Worker 226*6777b538SAndroid Build Coastguard Worker struct timeval ev_timeout; 227*6777b538SAndroid Build Coastguard Worker 228*6777b538SAndroid Build Coastguard Worker int ev_pri; /* smaller numbers are higher priority */ 229*6777b538SAndroid Build Coastguard Worker 230*6777b538SAndroid Build Coastguard Worker void (*ev_callback)(int, short, void *arg); 231*6777b538SAndroid Build Coastguard Worker void *ev_arg; 232*6777b538SAndroid Build Coastguard Worker 233*6777b538SAndroid Build Coastguard Worker int ev_res; /* result passed to event callback */ 234*6777b538SAndroid Build Coastguard Worker int ev_flags; 235*6777b538SAndroid Build Coastguard Worker }; 236*6777b538SAndroid Build Coastguard Worker #else 237*6777b538SAndroid Build Coastguard Worker struct event; 238*6777b538SAndroid Build Coastguard Worker #endif 239*6777b538SAndroid Build Coastguard Worker 240*6777b538SAndroid Build Coastguard Worker #define EVENT_SIGNAL(ev) (int)(ev)->ev_fd 241*6777b538SAndroid Build Coastguard Worker #define EVENT_FD(ev) (int)(ev)->ev_fd 242*6777b538SAndroid Build Coastguard Worker 243*6777b538SAndroid Build Coastguard Worker /* 244*6777b538SAndroid Build Coastguard Worker * Key-Value pairs. Can be used for HTTP headers but also for 245*6777b538SAndroid Build Coastguard Worker * query argument parsing. 246*6777b538SAndroid Build Coastguard Worker */ 247*6777b538SAndroid Build Coastguard Worker struct evkeyval { 248*6777b538SAndroid Build Coastguard Worker TAILQ_ENTRY(evkeyval) next; 249*6777b538SAndroid Build Coastguard Worker 250*6777b538SAndroid Build Coastguard Worker char *key; 251*6777b538SAndroid Build Coastguard Worker char *value; 252*6777b538SAndroid Build Coastguard Worker }; 253*6777b538SAndroid Build Coastguard Worker 254*6777b538SAndroid Build Coastguard Worker #ifdef _EVENT_DEFINED_TQENTRY 255*6777b538SAndroid Build Coastguard Worker #undef TAILQ_ENTRY 256*6777b538SAndroid Build Coastguard Worker struct event_list; 257*6777b538SAndroid Build Coastguard Worker struct evkeyvalq; 258*6777b538SAndroid Build Coastguard Worker #undef _EVENT_DEFINED_TQENTRY 259*6777b538SAndroid Build Coastguard Worker #else 260*6777b538SAndroid Build Coastguard Worker TAILQ_HEAD (event_list, event); 261*6777b538SAndroid Build Coastguard Worker TAILQ_HEAD (evkeyvalq, evkeyval); 262*6777b538SAndroid Build Coastguard Worker #endif /* _EVENT_DEFINED_TQENTRY */ 263*6777b538SAndroid Build Coastguard Worker 264*6777b538SAndroid Build Coastguard Worker /** 265*6777b538SAndroid Build Coastguard Worker Initialize the event API. 266*6777b538SAndroid Build Coastguard Worker 267*6777b538SAndroid Build Coastguard Worker Use event_base_new() to initialize a new event base, but does not set 268*6777b538SAndroid Build Coastguard Worker the current_base global. If using only event_base_new(), each event 269*6777b538SAndroid Build Coastguard Worker added must have an event base set with event_base_set() 270*6777b538SAndroid Build Coastguard Worker 271*6777b538SAndroid Build Coastguard Worker @see event_base_set(), event_base_free(), event_init() 272*6777b538SAndroid Build Coastguard Worker */ 273*6777b538SAndroid Build Coastguard Worker struct event_base *event_base_new(void); 274*6777b538SAndroid Build Coastguard Worker 275*6777b538SAndroid Build Coastguard Worker /** 276*6777b538SAndroid Build Coastguard Worker Initialize the event API. 277*6777b538SAndroid Build Coastguard Worker 278*6777b538SAndroid Build Coastguard Worker The event API needs to be initialized with event_init() before it can be 279*6777b538SAndroid Build Coastguard Worker used. Sets the current_base global representing the default base for 280*6777b538SAndroid Build Coastguard Worker events that have no base associated with them. 281*6777b538SAndroid Build Coastguard Worker 282*6777b538SAndroid Build Coastguard Worker @see event_base_set(), event_base_new() 283*6777b538SAndroid Build Coastguard Worker */ 284*6777b538SAndroid Build Coastguard Worker struct event_base *event_init(void); 285*6777b538SAndroid Build Coastguard Worker 286*6777b538SAndroid Build Coastguard Worker /** 287*6777b538SAndroid Build Coastguard Worker Reinitialized the event base after a fork 288*6777b538SAndroid Build Coastguard Worker 289*6777b538SAndroid Build Coastguard Worker Some event mechanisms do not survive across fork. The event base needs 290*6777b538SAndroid Build Coastguard Worker to be reinitialized with the event_reinit() function. 291*6777b538SAndroid Build Coastguard Worker 292*6777b538SAndroid Build Coastguard Worker @param base the event base that needs to be re-initialized 293*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if some events could not be re-added. 294*6777b538SAndroid Build Coastguard Worker @see event_base_new(), event_init() 295*6777b538SAndroid Build Coastguard Worker */ 296*6777b538SAndroid Build Coastguard Worker int event_reinit(struct event_base *base); 297*6777b538SAndroid Build Coastguard Worker 298*6777b538SAndroid Build Coastguard Worker /** 299*6777b538SAndroid Build Coastguard Worker Loop to process events. 300*6777b538SAndroid Build Coastguard Worker 301*6777b538SAndroid Build Coastguard Worker In order to process events, an application needs to call 302*6777b538SAndroid Build Coastguard Worker event_dispatch(). This function only returns on error, and should 303*6777b538SAndroid Build Coastguard Worker replace the event core of the application program. 304*6777b538SAndroid Build Coastguard Worker 305*6777b538SAndroid Build Coastguard Worker @see event_base_dispatch() 306*6777b538SAndroid Build Coastguard Worker */ 307*6777b538SAndroid Build Coastguard Worker int event_dispatch(void); 308*6777b538SAndroid Build Coastguard Worker 309*6777b538SAndroid Build Coastguard Worker 310*6777b538SAndroid Build Coastguard Worker /** 311*6777b538SAndroid Build Coastguard Worker Threadsafe event dispatching loop. 312*6777b538SAndroid Build Coastguard Worker 313*6777b538SAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 314*6777b538SAndroid Build Coastguard Worker @see event_init(), event_dispatch() 315*6777b538SAndroid Build Coastguard Worker */ 316*6777b538SAndroid Build Coastguard Worker int event_base_dispatch(struct event_base *); 317*6777b538SAndroid Build Coastguard Worker 318*6777b538SAndroid Build Coastguard Worker 319*6777b538SAndroid Build Coastguard Worker /** 320*6777b538SAndroid Build Coastguard Worker Get the kernel event notification mechanism used by libevent. 321*6777b538SAndroid Build Coastguard Worker 322*6777b538SAndroid Build Coastguard Worker @param eb the event_base structure returned by event_base_new() 323*6777b538SAndroid Build Coastguard Worker @return a string identifying the kernel event mechanism (kqueue, epoll, etc.) 324*6777b538SAndroid Build Coastguard Worker */ 325*6777b538SAndroid Build Coastguard Worker const char *event_base_get_method(struct event_base *); 326*6777b538SAndroid Build Coastguard Worker 327*6777b538SAndroid Build Coastguard Worker 328*6777b538SAndroid Build Coastguard Worker /** 329*6777b538SAndroid Build Coastguard Worker Deallocate all memory associated with an event_base, and free the base. 330*6777b538SAndroid Build Coastguard Worker 331*6777b538SAndroid Build Coastguard Worker Note that this function will not close any fds or free any memory passed 332*6777b538SAndroid Build Coastguard Worker to event_set as the argument to callback. 333*6777b538SAndroid Build Coastguard Worker 334*6777b538SAndroid Build Coastguard Worker @param eb an event_base to be freed 335*6777b538SAndroid Build Coastguard Worker */ 336*6777b538SAndroid Build Coastguard Worker void event_base_free(struct event_base *); 337*6777b538SAndroid Build Coastguard Worker 338*6777b538SAndroid Build Coastguard Worker 339*6777b538SAndroid Build Coastguard Worker #define _EVENT_LOG_DEBUG 0 340*6777b538SAndroid Build Coastguard Worker #define _EVENT_LOG_MSG 1 341*6777b538SAndroid Build Coastguard Worker #define _EVENT_LOG_WARN 2 342*6777b538SAndroid Build Coastguard Worker #define _EVENT_LOG_ERR 3 343*6777b538SAndroid Build Coastguard Worker typedef void (*event_log_cb)(int severity, const char *msg); 344*6777b538SAndroid Build Coastguard Worker /** 345*6777b538SAndroid Build Coastguard Worker Redirect libevent's log messages. 346*6777b538SAndroid Build Coastguard Worker 347*6777b538SAndroid Build Coastguard Worker @param cb a function taking two arguments: an integer severity between 348*6777b538SAndroid Build Coastguard Worker _EVENT_LOG_DEBUG and _EVENT_LOG_ERR, and a string. If cb is NULL, 349*6777b538SAndroid Build Coastguard Worker then the default log is used. 350*6777b538SAndroid Build Coastguard Worker */ 351*6777b538SAndroid Build Coastguard Worker void event_set_log_callback(event_log_cb cb); 352*6777b538SAndroid Build Coastguard Worker 353*6777b538SAndroid Build Coastguard Worker /** 354*6777b538SAndroid Build Coastguard Worker Associate a different event base with an event. 355*6777b538SAndroid Build Coastguard Worker 356*6777b538SAndroid Build Coastguard Worker @param eb the event base 357*6777b538SAndroid Build Coastguard Worker @param ev the event 358*6777b538SAndroid Build Coastguard Worker */ 359*6777b538SAndroid Build Coastguard Worker int event_base_set(struct event_base *, struct event *); 360*6777b538SAndroid Build Coastguard Worker 361*6777b538SAndroid Build Coastguard Worker /** 362*6777b538SAndroid Build Coastguard Worker event_loop() flags 363*6777b538SAndroid Build Coastguard Worker */ 364*6777b538SAndroid Build Coastguard Worker /*@{*/ 365*6777b538SAndroid Build Coastguard Worker #define EVLOOP_ONCE 0x01 /**< Block at most once. */ 366*6777b538SAndroid Build Coastguard Worker #define EVLOOP_NONBLOCK 0x02 /**< Do not block. */ 367*6777b538SAndroid Build Coastguard Worker /*@}*/ 368*6777b538SAndroid Build Coastguard Worker 369*6777b538SAndroid Build Coastguard Worker /** 370*6777b538SAndroid Build Coastguard Worker Handle events. 371*6777b538SAndroid Build Coastguard Worker 372*6777b538SAndroid Build Coastguard Worker This is a more flexible version of event_dispatch(). 373*6777b538SAndroid Build Coastguard Worker 374*6777b538SAndroid Build Coastguard Worker @param flags any combination of EVLOOP_ONCE | EVLOOP_NONBLOCK 375*6777b538SAndroid Build Coastguard Worker @return 0 if successful, -1 if an error occurred, or 1 if no events were 376*6777b538SAndroid Build Coastguard Worker registered. 377*6777b538SAndroid Build Coastguard Worker @see event_loopexit(), event_base_loop() 378*6777b538SAndroid Build Coastguard Worker */ 379*6777b538SAndroid Build Coastguard Worker int event_loop(int); 380*6777b538SAndroid Build Coastguard Worker 381*6777b538SAndroid Build Coastguard Worker /** 382*6777b538SAndroid Build Coastguard Worker Handle events (threadsafe version). 383*6777b538SAndroid Build Coastguard Worker 384*6777b538SAndroid Build Coastguard Worker This is a more flexible version of event_base_dispatch(). 385*6777b538SAndroid Build Coastguard Worker 386*6777b538SAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 387*6777b538SAndroid Build Coastguard Worker @param flags any combination of EVLOOP_ONCE | EVLOOP_NONBLOCK 388*6777b538SAndroid Build Coastguard Worker @return 0 if successful, -1 if an error occurred, or 1 if no events were 389*6777b538SAndroid Build Coastguard Worker registered. 390*6777b538SAndroid Build Coastguard Worker @see event_loopexit(), event_base_loop() 391*6777b538SAndroid Build Coastguard Worker */ 392*6777b538SAndroid Build Coastguard Worker int event_base_loop(struct event_base *, int); 393*6777b538SAndroid Build Coastguard Worker 394*6777b538SAndroid Build Coastguard Worker /** 395*6777b538SAndroid Build Coastguard Worker Exit the event loop after the specified time. 396*6777b538SAndroid Build Coastguard Worker 397*6777b538SAndroid Build Coastguard Worker The next event_loop() iteration after the given timer expires will 398*6777b538SAndroid Build Coastguard Worker complete normally (handling all queued events) then exit without 399*6777b538SAndroid Build Coastguard Worker blocking for events again. 400*6777b538SAndroid Build Coastguard Worker 401*6777b538SAndroid Build Coastguard Worker Subsequent invocations of event_loop() will proceed normally. 402*6777b538SAndroid Build Coastguard Worker 403*6777b538SAndroid Build Coastguard Worker @param tv the amount of time after which the loop should terminate. 404*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 405*6777b538SAndroid Build Coastguard Worker @see event_loop(), event_base_loop(), event_base_loopexit() 406*6777b538SAndroid Build Coastguard Worker */ 407*6777b538SAndroid Build Coastguard Worker int event_loopexit(const struct timeval *); 408*6777b538SAndroid Build Coastguard Worker 409*6777b538SAndroid Build Coastguard Worker 410*6777b538SAndroid Build Coastguard Worker /** 411*6777b538SAndroid Build Coastguard Worker Exit the event loop after the specified time (threadsafe variant). 412*6777b538SAndroid Build Coastguard Worker 413*6777b538SAndroid Build Coastguard Worker The next event_base_loop() iteration after the given timer expires will 414*6777b538SAndroid Build Coastguard Worker complete normally (handling all queued events) then exit without 415*6777b538SAndroid Build Coastguard Worker blocking for events again. 416*6777b538SAndroid Build Coastguard Worker 417*6777b538SAndroid Build Coastguard Worker Subsequent invocations of event_base_loop() will proceed normally. 418*6777b538SAndroid Build Coastguard Worker 419*6777b538SAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 420*6777b538SAndroid Build Coastguard Worker @param tv the amount of time after which the loop should terminate. 421*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 422*6777b538SAndroid Build Coastguard Worker @see event_loopexit() 423*6777b538SAndroid Build Coastguard Worker */ 424*6777b538SAndroid Build Coastguard Worker int event_base_loopexit(struct event_base *, const struct timeval *); 425*6777b538SAndroid Build Coastguard Worker 426*6777b538SAndroid Build Coastguard Worker /** 427*6777b538SAndroid Build Coastguard Worker Abort the active event_loop() immediately. 428*6777b538SAndroid Build Coastguard Worker 429*6777b538SAndroid Build Coastguard Worker event_loop() will abort the loop after the next event is completed; 430*6777b538SAndroid Build Coastguard Worker event_loopbreak() is typically invoked from this event's callback. 431*6777b538SAndroid Build Coastguard Worker This behavior is analogous to the "break;" statement. 432*6777b538SAndroid Build Coastguard Worker 433*6777b538SAndroid Build Coastguard Worker Subsequent invocations of event_loop() will proceed normally. 434*6777b538SAndroid Build Coastguard Worker 435*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 436*6777b538SAndroid Build Coastguard Worker @see event_base_loopbreak(), event_loopexit() 437*6777b538SAndroid Build Coastguard Worker */ 438*6777b538SAndroid Build Coastguard Worker int event_loopbreak(void); 439*6777b538SAndroid Build Coastguard Worker 440*6777b538SAndroid Build Coastguard Worker /** 441*6777b538SAndroid Build Coastguard Worker Abort the active event_base_loop() immediately. 442*6777b538SAndroid Build Coastguard Worker 443*6777b538SAndroid Build Coastguard Worker event_base_loop() will abort the loop after the next event is completed; 444*6777b538SAndroid Build Coastguard Worker event_base_loopbreak() is typically invoked from this event's callback. 445*6777b538SAndroid Build Coastguard Worker This behavior is analogous to the "break;" statement. 446*6777b538SAndroid Build Coastguard Worker 447*6777b538SAndroid Build Coastguard Worker Subsequent invocations of event_loop() will proceed normally. 448*6777b538SAndroid Build Coastguard Worker 449*6777b538SAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 450*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 451*6777b538SAndroid Build Coastguard Worker @see event_base_loopexit 452*6777b538SAndroid Build Coastguard Worker */ 453*6777b538SAndroid Build Coastguard Worker int event_base_loopbreak(struct event_base *); 454*6777b538SAndroid Build Coastguard Worker 455*6777b538SAndroid Build Coastguard Worker 456*6777b538SAndroid Build Coastguard Worker /** 457*6777b538SAndroid Build Coastguard Worker Add a timer event. 458*6777b538SAndroid Build Coastguard Worker 459*6777b538SAndroid Build Coastguard Worker @param ev the event struct 460*6777b538SAndroid Build Coastguard Worker @param tv timeval struct 461*6777b538SAndroid Build Coastguard Worker */ 462*6777b538SAndroid Build Coastguard Worker #define evtimer_add(ev, tv) event_add(ev, tv) 463*6777b538SAndroid Build Coastguard Worker 464*6777b538SAndroid Build Coastguard Worker 465*6777b538SAndroid Build Coastguard Worker /** 466*6777b538SAndroid Build Coastguard Worker Define a timer event. 467*6777b538SAndroid Build Coastguard Worker 468*6777b538SAndroid Build Coastguard Worker @param ev event struct to be modified 469*6777b538SAndroid Build Coastguard Worker @param cb callback function 470*6777b538SAndroid Build Coastguard Worker @param arg argument that will be passed to the callback function 471*6777b538SAndroid Build Coastguard Worker */ 472*6777b538SAndroid Build Coastguard Worker #define evtimer_set(ev, cb, arg) event_set(ev, -1, 0, cb, arg) 473*6777b538SAndroid Build Coastguard Worker 474*6777b538SAndroid Build Coastguard Worker 475*6777b538SAndroid Build Coastguard Worker /** 476*6777b538SAndroid Build Coastguard Worker * Delete a timer event. 477*6777b538SAndroid Build Coastguard Worker * 478*6777b538SAndroid Build Coastguard Worker * @param ev the event struct to be disabled 479*6777b538SAndroid Build Coastguard Worker */ 480*6777b538SAndroid Build Coastguard Worker #define evtimer_del(ev) event_del(ev) 481*6777b538SAndroid Build Coastguard Worker #define evtimer_pending(ev, tv) event_pending(ev, EV_TIMEOUT, tv) 482*6777b538SAndroid Build Coastguard Worker #define evtimer_initialized(ev) ((ev)->ev_flags & EVLIST_INIT) 483*6777b538SAndroid Build Coastguard Worker 484*6777b538SAndroid Build Coastguard Worker /** 485*6777b538SAndroid Build Coastguard Worker * Add a timeout event. 486*6777b538SAndroid Build Coastguard Worker * 487*6777b538SAndroid Build Coastguard Worker * @param ev the event struct to be disabled 488*6777b538SAndroid Build Coastguard Worker * @param tv the timeout value, in seconds 489*6777b538SAndroid Build Coastguard Worker */ 490*6777b538SAndroid Build Coastguard Worker #define timeout_add(ev, tv) event_add(ev, tv) 491*6777b538SAndroid Build Coastguard Worker 492*6777b538SAndroid Build Coastguard Worker 493*6777b538SAndroid Build Coastguard Worker /** 494*6777b538SAndroid Build Coastguard Worker * Define a timeout event. 495*6777b538SAndroid Build Coastguard Worker * 496*6777b538SAndroid Build Coastguard Worker * @param ev the event struct to be defined 497*6777b538SAndroid Build Coastguard Worker * @param cb the callback to be invoked when the timeout expires 498*6777b538SAndroid Build Coastguard Worker * @param arg the argument to be passed to the callback 499*6777b538SAndroid Build Coastguard Worker */ 500*6777b538SAndroid Build Coastguard Worker #define timeout_set(ev, cb, arg) event_set(ev, -1, 0, cb, arg) 501*6777b538SAndroid Build Coastguard Worker 502*6777b538SAndroid Build Coastguard Worker 503*6777b538SAndroid Build Coastguard Worker /** 504*6777b538SAndroid Build Coastguard Worker * Disable a timeout event. 505*6777b538SAndroid Build Coastguard Worker * 506*6777b538SAndroid Build Coastguard Worker * @param ev the timeout event to be disabled 507*6777b538SAndroid Build Coastguard Worker */ 508*6777b538SAndroid Build Coastguard Worker #define timeout_del(ev) event_del(ev) 509*6777b538SAndroid Build Coastguard Worker 510*6777b538SAndroid Build Coastguard Worker #define timeout_pending(ev, tv) event_pending(ev, EV_TIMEOUT, tv) 511*6777b538SAndroid Build Coastguard Worker #define timeout_initialized(ev) ((ev)->ev_flags & EVLIST_INIT) 512*6777b538SAndroid Build Coastguard Worker 513*6777b538SAndroid Build Coastguard Worker #define signal_add(ev, tv) event_add(ev, tv) 514*6777b538SAndroid Build Coastguard Worker #define signal_set(ev, x, cb, arg) \ 515*6777b538SAndroid Build Coastguard Worker event_set(ev, x, EV_SIGNAL|EV_PERSIST, cb, arg) 516*6777b538SAndroid Build Coastguard Worker #define signal_del(ev) event_del(ev) 517*6777b538SAndroid Build Coastguard Worker #define signal_pending(ev, tv) event_pending(ev, EV_SIGNAL, tv) 518*6777b538SAndroid Build Coastguard Worker #define signal_initialized(ev) ((ev)->ev_flags & EVLIST_INIT) 519*6777b538SAndroid Build Coastguard Worker 520*6777b538SAndroid Build Coastguard Worker /** 521*6777b538SAndroid Build Coastguard Worker Prepare an event structure to be added. 522*6777b538SAndroid Build Coastguard Worker 523*6777b538SAndroid Build Coastguard Worker The function event_set() prepares the event structure ev to be used in 524*6777b538SAndroid Build Coastguard Worker future calls to event_add() and event_del(). The event will be prepared to 525*6777b538SAndroid Build Coastguard Worker call the function specified by the fn argument with an int argument 526*6777b538SAndroid Build Coastguard Worker indicating the file descriptor, a short argument indicating the type of 527*6777b538SAndroid Build Coastguard Worker event, and a void * argument given in the arg argument. The fd indicates 528*6777b538SAndroid Build Coastguard Worker the file descriptor that should be monitored for events. The events can be 529*6777b538SAndroid Build Coastguard Worker either EV_READ, EV_WRITE, or both. Indicating that an application can read 530*6777b538SAndroid Build Coastguard Worker or write from the file descriptor respectively without blocking. 531*6777b538SAndroid Build Coastguard Worker 532*6777b538SAndroid Build Coastguard Worker The function fn will be called with the file descriptor that triggered the 533*6777b538SAndroid Build Coastguard Worker event and the type of event which will be either EV_TIMEOUT, EV_SIGNAL, 534*6777b538SAndroid Build Coastguard Worker EV_READ, or EV_WRITE. The additional flag EV_PERSIST makes an event_add() 535*6777b538SAndroid Build Coastguard Worker persistent until event_del() has been called. 536*6777b538SAndroid Build Coastguard Worker 537*6777b538SAndroid Build Coastguard Worker @param ev an event struct to be modified 538*6777b538SAndroid Build Coastguard Worker @param fd the file descriptor to be monitored 539*6777b538SAndroid Build Coastguard Worker @param event desired events to monitor; can be EV_READ and/or EV_WRITE 540*6777b538SAndroid Build Coastguard Worker @param fn callback function to be invoked when the event occurs 541*6777b538SAndroid Build Coastguard Worker @param arg an argument to be passed to the callback function 542*6777b538SAndroid Build Coastguard Worker 543*6777b538SAndroid Build Coastguard Worker @see event_add(), event_del(), event_once() 544*6777b538SAndroid Build Coastguard Worker 545*6777b538SAndroid Build Coastguard Worker */ 546*6777b538SAndroid Build Coastguard Worker void event_set(struct event *, int, short, void (*)(int, short, void *), void *); 547*6777b538SAndroid Build Coastguard Worker 548*6777b538SAndroid Build Coastguard Worker /** 549*6777b538SAndroid Build Coastguard Worker Schedule a one-time event to occur. 550*6777b538SAndroid Build Coastguard Worker 551*6777b538SAndroid Build Coastguard Worker The function event_once() is similar to event_set(). However, it schedules 552*6777b538SAndroid Build Coastguard Worker a callback to be called exactly once and does not require the caller to 553*6777b538SAndroid Build Coastguard Worker prepare an event structure. 554*6777b538SAndroid Build Coastguard Worker 555*6777b538SAndroid Build Coastguard Worker @param fd a file descriptor to monitor 556*6777b538SAndroid Build Coastguard Worker @param events event(s) to monitor; can be any of EV_TIMEOUT | EV_READ | 557*6777b538SAndroid Build Coastguard Worker EV_WRITE 558*6777b538SAndroid Build Coastguard Worker @param callback callback function to be invoked when the event occurs 559*6777b538SAndroid Build Coastguard Worker @param arg an argument to be passed to the callback function 560*6777b538SAndroid Build Coastguard Worker @param timeout the maximum amount of time to wait for the event, or NULL 561*6777b538SAndroid Build Coastguard Worker to wait forever 562*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 563*6777b538SAndroid Build Coastguard Worker @see event_set() 564*6777b538SAndroid Build Coastguard Worker 565*6777b538SAndroid Build Coastguard Worker */ 566*6777b538SAndroid Build Coastguard Worker int event_once(int, short, void (*)(int, short, void *), void *, 567*6777b538SAndroid Build Coastguard Worker const struct timeval *); 568*6777b538SAndroid Build Coastguard Worker 569*6777b538SAndroid Build Coastguard Worker 570*6777b538SAndroid Build Coastguard Worker /** 571*6777b538SAndroid Build Coastguard Worker Schedule a one-time event (threadsafe variant) 572*6777b538SAndroid Build Coastguard Worker 573*6777b538SAndroid Build Coastguard Worker The function event_base_once() is similar to event_set(). However, it 574*6777b538SAndroid Build Coastguard Worker schedules a callback to be called exactly once and does not require the 575*6777b538SAndroid Build Coastguard Worker caller to prepare an event structure. 576*6777b538SAndroid Build Coastguard Worker 577*6777b538SAndroid Build Coastguard Worker @param base an event_base returned by event_init() 578*6777b538SAndroid Build Coastguard Worker @param fd a file descriptor to monitor 579*6777b538SAndroid Build Coastguard Worker @param events event(s) to monitor; can be any of EV_TIMEOUT | EV_READ | 580*6777b538SAndroid Build Coastguard Worker EV_WRITE 581*6777b538SAndroid Build Coastguard Worker @param callback callback function to be invoked when the event occurs 582*6777b538SAndroid Build Coastguard Worker @param arg an argument to be passed to the callback function 583*6777b538SAndroid Build Coastguard Worker @param timeout the maximum amount of time to wait for the event, or NULL 584*6777b538SAndroid Build Coastguard Worker to wait forever 585*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 586*6777b538SAndroid Build Coastguard Worker @see event_once() 587*6777b538SAndroid Build Coastguard Worker */ 588*6777b538SAndroid Build Coastguard Worker int event_base_once(struct event_base *base, int fd, short events, 589*6777b538SAndroid Build Coastguard Worker void (*callback)(int, short, void *), void *arg, 590*6777b538SAndroid Build Coastguard Worker const struct timeval *timeout); 591*6777b538SAndroid Build Coastguard Worker 592*6777b538SAndroid Build Coastguard Worker 593*6777b538SAndroid Build Coastguard Worker /** 594*6777b538SAndroid Build Coastguard Worker Add an event to the set of monitored events. 595*6777b538SAndroid Build Coastguard Worker 596*6777b538SAndroid Build Coastguard Worker The function event_add() schedules the execution of the ev event when the 597*6777b538SAndroid Build Coastguard Worker event specified in event_set() occurs or in at least the time specified in 598*6777b538SAndroid Build Coastguard Worker the tv. If tv is NULL, no timeout occurs and the function will only be 599*6777b538SAndroid Build Coastguard Worker called if a matching event occurs on the file descriptor. The event in the 600*6777b538SAndroid Build Coastguard Worker ev argument must be already initialized by event_set() and may not be used 601*6777b538SAndroid Build Coastguard Worker in calls to event_set() until it has timed out or been removed with 602*6777b538SAndroid Build Coastguard Worker event_del(). If the event in the ev argument already has a scheduled 603*6777b538SAndroid Build Coastguard Worker timeout, the old timeout will be replaced by the new one. 604*6777b538SAndroid Build Coastguard Worker 605*6777b538SAndroid Build Coastguard Worker @param ev an event struct initialized via event_set() 606*6777b538SAndroid Build Coastguard Worker @param timeout the maximum amount of time to wait for the event, or NULL 607*6777b538SAndroid Build Coastguard Worker to wait forever 608*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 609*6777b538SAndroid Build Coastguard Worker @see event_del(), event_set() 610*6777b538SAndroid Build Coastguard Worker */ 611*6777b538SAndroid Build Coastguard Worker int event_add(struct event *ev, const struct timeval *timeout); 612*6777b538SAndroid Build Coastguard Worker 613*6777b538SAndroid Build Coastguard Worker 614*6777b538SAndroid Build Coastguard Worker /** 615*6777b538SAndroid Build Coastguard Worker Remove an event from the set of monitored events. 616*6777b538SAndroid Build Coastguard Worker 617*6777b538SAndroid Build Coastguard Worker The function event_del() will cancel the event in the argument ev. If the 618*6777b538SAndroid Build Coastguard Worker event has already executed or has never been added the call will have no 619*6777b538SAndroid Build Coastguard Worker effect. 620*6777b538SAndroid Build Coastguard Worker 621*6777b538SAndroid Build Coastguard Worker @param ev an event struct to be removed from the working set 622*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 623*6777b538SAndroid Build Coastguard Worker @see event_add() 624*6777b538SAndroid Build Coastguard Worker */ 625*6777b538SAndroid Build Coastguard Worker int event_del(struct event *); 626*6777b538SAndroid Build Coastguard Worker 627*6777b538SAndroid Build Coastguard Worker void event_active(struct event *, int, short); 628*6777b538SAndroid Build Coastguard Worker 629*6777b538SAndroid Build Coastguard Worker 630*6777b538SAndroid Build Coastguard Worker /** 631*6777b538SAndroid Build Coastguard Worker Checks if a specific event is pending or scheduled. 632*6777b538SAndroid Build Coastguard Worker 633*6777b538SAndroid Build Coastguard Worker @param ev an event struct previously passed to event_add() 634*6777b538SAndroid Build Coastguard Worker @param event the requested event type; any of EV_TIMEOUT|EV_READ| 635*6777b538SAndroid Build Coastguard Worker EV_WRITE|EV_SIGNAL 636*6777b538SAndroid Build Coastguard Worker @param tv an alternate timeout (FIXME - is this true?) 637*6777b538SAndroid Build Coastguard Worker 638*6777b538SAndroid Build Coastguard Worker @return 1 if the event is pending, or 0 if the event has not occurred 639*6777b538SAndroid Build Coastguard Worker 640*6777b538SAndroid Build Coastguard Worker */ 641*6777b538SAndroid Build Coastguard Worker int event_pending(struct event *ev, short event, struct timeval *tv); 642*6777b538SAndroid Build Coastguard Worker 643*6777b538SAndroid Build Coastguard Worker 644*6777b538SAndroid Build Coastguard Worker /** 645*6777b538SAndroid Build Coastguard Worker Test if an event structure has been initialized. 646*6777b538SAndroid Build Coastguard Worker 647*6777b538SAndroid Build Coastguard Worker The event_initialized() macro can be used to check if an event has been 648*6777b538SAndroid Build Coastguard Worker initialized. 649*6777b538SAndroid Build Coastguard Worker 650*6777b538SAndroid Build Coastguard Worker @param ev an event structure to be tested 651*6777b538SAndroid Build Coastguard Worker @return 1 if the structure has been initialized, or 0 if it has not been 652*6777b538SAndroid Build Coastguard Worker initialized 653*6777b538SAndroid Build Coastguard Worker */ 654*6777b538SAndroid Build Coastguard Worker #ifdef WIN32 655*6777b538SAndroid Build Coastguard Worker #define event_initialized(ev) ((ev)->ev_flags & EVLIST_INIT && (ev)->ev_fd != (int)INVALID_HANDLE_VALUE) 656*6777b538SAndroid Build Coastguard Worker #else 657*6777b538SAndroid Build Coastguard Worker #define event_initialized(ev) ((ev)->ev_flags & EVLIST_INIT) 658*6777b538SAndroid Build Coastguard Worker #endif 659*6777b538SAndroid Build Coastguard Worker 660*6777b538SAndroid Build Coastguard Worker 661*6777b538SAndroid Build Coastguard Worker /** 662*6777b538SAndroid Build Coastguard Worker Get the libevent version number. 663*6777b538SAndroid Build Coastguard Worker 664*6777b538SAndroid Build Coastguard Worker @return a string containing the version number of libevent 665*6777b538SAndroid Build Coastguard Worker */ 666*6777b538SAndroid Build Coastguard Worker const char *event_get_version(void); 667*6777b538SAndroid Build Coastguard Worker 668*6777b538SAndroid Build Coastguard Worker 669*6777b538SAndroid Build Coastguard Worker /** 670*6777b538SAndroid Build Coastguard Worker Get the kernel event notification mechanism used by libevent. 671*6777b538SAndroid Build Coastguard Worker 672*6777b538SAndroid Build Coastguard Worker @return a string identifying the kernel event mechanism (kqueue, epoll, etc.) 673*6777b538SAndroid Build Coastguard Worker */ 674*6777b538SAndroid Build Coastguard Worker const char *event_get_method(void); 675*6777b538SAndroid Build Coastguard Worker 676*6777b538SAndroid Build Coastguard Worker 677*6777b538SAndroid Build Coastguard Worker /** 678*6777b538SAndroid Build Coastguard Worker Set the number of different event priorities. 679*6777b538SAndroid Build Coastguard Worker 680*6777b538SAndroid Build Coastguard Worker By default libevent schedules all active events with the same priority. 681*6777b538SAndroid Build Coastguard Worker However, some time it is desirable to process some events with a higher 682*6777b538SAndroid Build Coastguard Worker priority than others. For that reason, libevent supports strict priority 683*6777b538SAndroid Build Coastguard Worker queues. Active events with a lower priority are always processed before 684*6777b538SAndroid Build Coastguard Worker events with a higher priority. 685*6777b538SAndroid Build Coastguard Worker 686*6777b538SAndroid Build Coastguard Worker The number of different priorities can be set initially with the 687*6777b538SAndroid Build Coastguard Worker event_priority_init() function. This function should be called before the 688*6777b538SAndroid Build Coastguard Worker first call to event_dispatch(). The event_priority_set() function can be 689*6777b538SAndroid Build Coastguard Worker used to assign a priority to an event. By default, libevent assigns the 690*6777b538SAndroid Build Coastguard Worker middle priority to all events unless their priority is explicitly set. 691*6777b538SAndroid Build Coastguard Worker 692*6777b538SAndroid Build Coastguard Worker @param npriorities the maximum number of priorities 693*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 694*6777b538SAndroid Build Coastguard Worker @see event_base_priority_init(), event_priority_set() 695*6777b538SAndroid Build Coastguard Worker 696*6777b538SAndroid Build Coastguard Worker */ 697*6777b538SAndroid Build Coastguard Worker int event_priority_init(int); 698*6777b538SAndroid Build Coastguard Worker 699*6777b538SAndroid Build Coastguard Worker 700*6777b538SAndroid Build Coastguard Worker /** 701*6777b538SAndroid Build Coastguard Worker Set the number of different event priorities (threadsafe variant). 702*6777b538SAndroid Build Coastguard Worker 703*6777b538SAndroid Build Coastguard Worker See the description of event_priority_init() for more information. 704*6777b538SAndroid Build Coastguard Worker 705*6777b538SAndroid Build Coastguard Worker @param eb the event_base structure returned by event_init() 706*6777b538SAndroid Build Coastguard Worker @param npriorities the maximum number of priorities 707*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 708*6777b538SAndroid Build Coastguard Worker @see event_priority_init(), event_priority_set() 709*6777b538SAndroid Build Coastguard Worker */ 710*6777b538SAndroid Build Coastguard Worker int event_base_priority_init(struct event_base *, int); 711*6777b538SAndroid Build Coastguard Worker 712*6777b538SAndroid Build Coastguard Worker 713*6777b538SAndroid Build Coastguard Worker /** 714*6777b538SAndroid Build Coastguard Worker Assign a priority to an event. 715*6777b538SAndroid Build Coastguard Worker 716*6777b538SAndroid Build Coastguard Worker @param ev an event struct 717*6777b538SAndroid Build Coastguard Worker @param priority the new priority to be assigned 718*6777b538SAndroid Build Coastguard Worker @return 0 if successful, or -1 if an error occurred 719*6777b538SAndroid Build Coastguard Worker @see event_priority_init() 720*6777b538SAndroid Build Coastguard Worker */ 721*6777b538SAndroid Build Coastguard Worker int event_priority_set(struct event *, int); 722*6777b538SAndroid Build Coastguard Worker 723*6777b538SAndroid Build Coastguard Worker #ifdef __cplusplus 724*6777b538SAndroid Build Coastguard Worker } 725*6777b538SAndroid Build Coastguard Worker #endif 726*6777b538SAndroid Build Coastguard Worker 727*6777b538SAndroid Build Coastguard Worker #endif /* _EVENT_H_ */ 728