xref: /aosp_15_r20/external/libevent/include/event2/event.h (revision 663afb9b963571284e0f0a60f257164ab54f64bf)
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() &ndash; 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