1*6777b538SAndroid Build Coastguard Worker.\" $OpenBSD: event.3,v 1.4 2002/07/12 18:50:48 provos Exp $ 2*6777b538SAndroid Build Coastguard Worker.\" 3*6777b538SAndroid Build Coastguard Worker.\" Copyright (c) 2000 Artur Grabowski <[email protected]> 4*6777b538SAndroid Build Coastguard Worker.\" All rights reserved. 5*6777b538SAndroid Build Coastguard Worker.\" 6*6777b538SAndroid Build Coastguard Worker.\" Redistribution and use in source and binary forms, with or without 7*6777b538SAndroid Build Coastguard Worker.\" modification, are permitted provided that the following conditions 8*6777b538SAndroid Build Coastguard Worker.\" are met: 9*6777b538SAndroid Build Coastguard Worker.\" 10*6777b538SAndroid Build Coastguard Worker.\" 1. Redistributions of source code must retain the above copyright 11*6777b538SAndroid Build Coastguard Worker.\" notice, this list of conditions and the following disclaimer. 12*6777b538SAndroid Build Coastguard Worker.\" 2. Redistributions in binary form must reproduce the above copyright 13*6777b538SAndroid Build Coastguard Worker.\" notice, this list of conditions and the following disclaimer in the 14*6777b538SAndroid Build Coastguard Worker.\" documentation and/or other materials provided with the distribution. 15*6777b538SAndroid Build Coastguard Worker.\" 3. The name of the author may not be used to endorse or promote products 16*6777b538SAndroid Build Coastguard Worker.\" derived from this software without specific prior written permission. 17*6777b538SAndroid Build Coastguard Worker.\" 18*6777b538SAndroid Build Coastguard Worker.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 19*6777b538SAndroid Build Coastguard Worker.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 20*6777b538SAndroid Build Coastguard Worker.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21*6777b538SAndroid Build Coastguard Worker.\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 22*6777b538SAndroid Build Coastguard Worker.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 23*6777b538SAndroid Build Coastguard Worker.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 24*6777b538SAndroid Build Coastguard Worker.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25*6777b538SAndroid Build Coastguard Worker.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26*6777b538SAndroid Build Coastguard Worker.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 27*6777b538SAndroid Build Coastguard Worker.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*6777b538SAndroid Build Coastguard Worker.\" 29*6777b538SAndroid Build Coastguard Worker.Dd August 8, 2000 30*6777b538SAndroid Build Coastguard Worker.Dt EVENT 3 31*6777b538SAndroid Build Coastguard Worker.Os 32*6777b538SAndroid Build Coastguard Worker.Sh NAME 33*6777b538SAndroid Build Coastguard Worker.Nm event_init , 34*6777b538SAndroid Build Coastguard Worker.Nm event_dispatch , 35*6777b538SAndroid Build Coastguard Worker.Nm event_loop , 36*6777b538SAndroid Build Coastguard Worker.Nm event_loopexit , 37*6777b538SAndroid Build Coastguard Worker.Nm event_loopbreak , 38*6777b538SAndroid Build Coastguard Worker.Nm event_set , 39*6777b538SAndroid Build Coastguard Worker.Nm event_base_dispatch , 40*6777b538SAndroid Build Coastguard Worker.Nm event_base_loop , 41*6777b538SAndroid Build Coastguard Worker.Nm event_base_loopexit , 42*6777b538SAndroid Build Coastguard Worker.Nm event_base_loopbreak , 43*6777b538SAndroid Build Coastguard Worker.Nm event_base_set , 44*6777b538SAndroid Build Coastguard Worker.Nm event_base_free , 45*6777b538SAndroid Build Coastguard Worker.Nm event_add , 46*6777b538SAndroid Build Coastguard Worker.Nm event_del , 47*6777b538SAndroid Build Coastguard Worker.Nm event_once , 48*6777b538SAndroid Build Coastguard Worker.Nm event_base_once , 49*6777b538SAndroid Build Coastguard Worker.Nm event_pending , 50*6777b538SAndroid Build Coastguard Worker.Nm event_initialized , 51*6777b538SAndroid Build Coastguard Worker.Nm event_priority_init , 52*6777b538SAndroid Build Coastguard Worker.Nm event_priority_set , 53*6777b538SAndroid Build Coastguard Worker.Nm evtimer_set , 54*6777b538SAndroid Build Coastguard Worker.Nm evtimer_add , 55*6777b538SAndroid Build Coastguard Worker.Nm evtimer_del , 56*6777b538SAndroid Build Coastguard Worker.Nm evtimer_pending , 57*6777b538SAndroid Build Coastguard Worker.Nm evtimer_initialized , 58*6777b538SAndroid Build Coastguard Worker.Nm signal_set , 59*6777b538SAndroid Build Coastguard Worker.Nm signal_add , 60*6777b538SAndroid Build Coastguard Worker.Nm signal_del , 61*6777b538SAndroid Build Coastguard Worker.Nm signal_pending , 62*6777b538SAndroid Build Coastguard Worker.Nm signal_initialized , 63*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_new , 64*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_free , 65*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_write , 66*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_write_buffer , 67*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_read , 68*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_enable , 69*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_disable , 70*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_settimeout , 71*6777b538SAndroid Build Coastguard Worker.Nm bufferevent_base_set , 72*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_new , 73*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_free , 74*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_add , 75*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_add_buffer , 76*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_add_printf , 77*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_add_vprintf , 78*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_drain , 79*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_write , 80*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_read , 81*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_find , 82*6777b538SAndroid Build Coastguard Worker.Nm evbuffer_readline , 83*6777b538SAndroid Build Coastguard Worker.Nm evhttp_new , 84*6777b538SAndroid Build Coastguard Worker.Nm evhttp_bind_socket , 85*6777b538SAndroid Build Coastguard Worker.Nm evhttp_free 86*6777b538SAndroid Build Coastguard Worker.Nd execute a function when a specific event occurs 87*6777b538SAndroid Build Coastguard Worker.Sh SYNOPSIS 88*6777b538SAndroid Build Coastguard Worker.Fd #include <sys/time.h> 89*6777b538SAndroid Build Coastguard Worker.Fd #include <event.h> 90*6777b538SAndroid Build Coastguard Worker.Ft "struct event_base *" 91*6777b538SAndroid Build Coastguard Worker.Fn "event_init" "void" 92*6777b538SAndroid Build Coastguard Worker.Ft int 93*6777b538SAndroid Build Coastguard Worker.Fn "event_dispatch" "void" 94*6777b538SAndroid Build Coastguard Worker.Ft int 95*6777b538SAndroid Build Coastguard Worker.Fn "event_loop" "int flags" 96*6777b538SAndroid Build Coastguard Worker.Ft int 97*6777b538SAndroid Build Coastguard Worker.Fn "event_loopexit" "struct timeval *tv" 98*6777b538SAndroid Build Coastguard Worker.Ft int 99*6777b538SAndroid Build Coastguard Worker.Fn "event_loopbreak" "void" 100*6777b538SAndroid Build Coastguard Worker.Ft void 101*6777b538SAndroid Build Coastguard Worker.Fn "event_set" "struct event *ev" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg" 102*6777b538SAndroid Build Coastguard Worker.Ft int 103*6777b538SAndroid Build Coastguard Worker.Fn "event_base_dispatch" "struct event_base *base" 104*6777b538SAndroid Build Coastguard Worker.Ft int 105*6777b538SAndroid Build Coastguard Worker.Fn "event_base_loop" "struct event_base *base" "int flags" 106*6777b538SAndroid Build Coastguard Worker.Ft int 107*6777b538SAndroid Build Coastguard Worker.Fn "event_base_loopexit" "struct event_base *base" "struct timeval *tv" 108*6777b538SAndroid Build Coastguard Worker.Ft int 109*6777b538SAndroid Build Coastguard Worker.Fn "event_base_loopbreak" "struct event_base *base" 110*6777b538SAndroid Build Coastguard Worker.Ft int 111*6777b538SAndroid Build Coastguard Worker.Fn "event_base_set" "struct event_base *base" "struct event *" 112*6777b538SAndroid Build Coastguard Worker.Ft void 113*6777b538SAndroid Build Coastguard Worker.Fn "event_base_free" "struct event_base *base" 114*6777b538SAndroid Build Coastguard Worker.Ft int 115*6777b538SAndroid Build Coastguard Worker.Fn "event_add" "struct event *ev" "struct timeval *tv" 116*6777b538SAndroid Build Coastguard Worker.Ft int 117*6777b538SAndroid Build Coastguard Worker.Fn "event_del" "struct event *ev" 118*6777b538SAndroid Build Coastguard Worker.Ft int 119*6777b538SAndroid Build Coastguard Worker.Fn "event_once" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg" "struct timeval *tv" 120*6777b538SAndroid Build Coastguard Worker.Ft int 121*6777b538SAndroid Build Coastguard Worker.Fn "event_base_once" "struct event_base *base" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg" "struct timeval *tv" 122*6777b538SAndroid Build Coastguard Worker.Ft int 123*6777b538SAndroid Build Coastguard Worker.Fn "event_pending" "struct event *ev" "short event" "struct timeval *tv" 124*6777b538SAndroid Build Coastguard Worker.Ft int 125*6777b538SAndroid Build Coastguard Worker.Fn "event_initialized" "struct event *ev" 126*6777b538SAndroid Build Coastguard Worker.Ft int 127*6777b538SAndroid Build Coastguard Worker.Fn "event_priority_init" "int npriorities" 128*6777b538SAndroid Build Coastguard Worker.Ft int 129*6777b538SAndroid Build Coastguard Worker.Fn "event_priority_set" "struct event *ev" "int priority" 130*6777b538SAndroid Build Coastguard Worker.Ft void 131*6777b538SAndroid Build Coastguard Worker.Fn "evtimer_set" "struct event *ev" "void (*fn)(int, short, void *)" "void *arg" 132*6777b538SAndroid Build Coastguard Worker.Ft void 133*6777b538SAndroid Build Coastguard Worker.Fn "evtimer_add" "struct event *ev" "struct timeval *" 134*6777b538SAndroid Build Coastguard Worker.Ft void 135*6777b538SAndroid Build Coastguard Worker.Fn "evtimer_del" "struct event *ev" 136*6777b538SAndroid Build Coastguard Worker.Ft int 137*6777b538SAndroid Build Coastguard Worker.Fn "evtimer_pending" "struct event *ev" "struct timeval *tv" 138*6777b538SAndroid Build Coastguard Worker.Ft int 139*6777b538SAndroid Build Coastguard Worker.Fn "evtimer_initialized" "struct event *ev" 140*6777b538SAndroid Build Coastguard Worker.Ft void 141*6777b538SAndroid Build Coastguard Worker.Fn "signal_set" "struct event *ev" "int signal" "void (*fn)(int, short, void *)" "void *arg" 142*6777b538SAndroid Build Coastguard Worker.Ft void 143*6777b538SAndroid Build Coastguard Worker.Fn "signal_add" "struct event *ev" "struct timeval *" 144*6777b538SAndroid Build Coastguard Worker.Ft void 145*6777b538SAndroid Build Coastguard Worker.Fn "signal_del" "struct event *ev" 146*6777b538SAndroid Build Coastguard Worker.Ft int 147*6777b538SAndroid Build Coastguard Worker.Fn "signal_pending" "struct event *ev" "struct timeval *tv" 148*6777b538SAndroid Build Coastguard Worker.Ft int 149*6777b538SAndroid Build Coastguard Worker.Fn "signal_initialized" "struct event *ev" 150*6777b538SAndroid Build Coastguard Worker.Ft "struct bufferevent *" 151*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_new" "int fd" "evbuffercb readcb" "evbuffercb writecb" "everrorcb" "void *cbarg" 152*6777b538SAndroid Build Coastguard Worker.Ft void 153*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_free" "struct bufferevent *bufev" 154*6777b538SAndroid Build Coastguard Worker.Ft int 155*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_write" "struct bufferevent *bufev" "void *data" "size_t size" 156*6777b538SAndroid Build Coastguard Worker.Ft int 157*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_write_buffer" "struct bufferevent *bufev" "struct evbuffer *buf" 158*6777b538SAndroid Build Coastguard Worker.Ft size_t 159*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_read" "struct bufferevent *bufev" "void *data" "size_t size" 160*6777b538SAndroid Build Coastguard Worker.Ft int 161*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_enable" "struct bufferevent *bufev" "short event" 162*6777b538SAndroid Build Coastguard Worker.Ft int 163*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_disable" "struct bufferevent *bufev" "short event" 164*6777b538SAndroid Build Coastguard Worker.Ft void 165*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_settimeout" "struct bufferevent *bufev" "int timeout_read" "int timeout_write" 166*6777b538SAndroid Build Coastguard Worker.Ft int 167*6777b538SAndroid Build Coastguard Worker.Fn "bufferevent_base_set" "struct event_base *base" "struct bufferevent *bufev" 168*6777b538SAndroid Build Coastguard Worker.Ft "struct evbuffer *" 169*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_new" "void" 170*6777b538SAndroid Build Coastguard Worker.Ft void 171*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_free" "struct evbuffer *buf" 172*6777b538SAndroid Build Coastguard Worker.Ft int 173*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_add" "struct evbuffer *buf" "const void *data" "size_t size" 174*6777b538SAndroid Build Coastguard Worker.Ft int 175*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_add_buffer" "struct evbuffer *dst" "struct evbuffer *src" 176*6777b538SAndroid Build Coastguard Worker.Ft int 177*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_add_printf" "struct evbuffer *buf" "const char *fmt" "..." 178*6777b538SAndroid Build Coastguard Worker.Ft int 179*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_add_vprintf" "struct evbuffer *buf" "const char *fmt" "va_list ap" 180*6777b538SAndroid Build Coastguard Worker.Ft void 181*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_drain" "struct evbuffer *buf" "size_t size" 182*6777b538SAndroid Build Coastguard Worker.Ft int 183*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_write" "struct evbuffer *buf" "int fd" 184*6777b538SAndroid Build Coastguard Worker.Ft int 185*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_read" "struct evbuffer *buf" "int fd" "int size" 186*6777b538SAndroid Build Coastguard Worker.Ft "u_char *" 187*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_find" "struct evbuffer *buf" "const u_char *data" "size_t size" 188*6777b538SAndroid Build Coastguard Worker.Ft "char *" 189*6777b538SAndroid Build Coastguard Worker.Fn "evbuffer_readline" "struct evbuffer *buf" 190*6777b538SAndroid Build Coastguard Worker.Ft "struct evhttp *" 191*6777b538SAndroid Build Coastguard Worker.Fn "evhttp_new" "struct event_base *base" 192*6777b538SAndroid Build Coastguard Worker.Ft int 193*6777b538SAndroid Build Coastguard Worker.Fn "evhttp_bind_socket" "struct evhttp *http" "const char *address" "u_short port" 194*6777b538SAndroid Build Coastguard Worker.Ft "void" 195*6777b538SAndroid Build Coastguard Worker.Fn "evhttp_free" "struct evhttp *http" 196*6777b538SAndroid Build Coastguard Worker.Ft int 197*6777b538SAndroid Build Coastguard Worker.Fa (*event_sigcb)(void) ; 198*6777b538SAndroid Build Coastguard Worker.Ft volatile sig_atomic_t 199*6777b538SAndroid Build Coastguard Worker.Fa event_gotsig ; 200*6777b538SAndroid Build Coastguard Worker.Sh DESCRIPTION 201*6777b538SAndroid Build Coastguard WorkerThe 202*6777b538SAndroid Build Coastguard Worker.Nm event 203*6777b538SAndroid Build Coastguard WorkerAPI provides a mechanism to execute a function when a specific event 204*6777b538SAndroid Build Coastguard Workeron a file descriptor occurs or after a given time has passed. 205*6777b538SAndroid Build Coastguard Worker.Pp 206*6777b538SAndroid Build Coastguard WorkerThe 207*6777b538SAndroid Build Coastguard Worker.Nm event 208*6777b538SAndroid Build Coastguard WorkerAPI needs to be initialized with 209*6777b538SAndroid Build Coastguard Worker.Fn event_init 210*6777b538SAndroid Build Coastguard Workerbefore it can be used. 211*6777b538SAndroid Build Coastguard Worker.Pp 212*6777b538SAndroid Build Coastguard WorkerIn order to process events, an application needs to call 213*6777b538SAndroid Build Coastguard Worker.Fn event_dispatch . 214*6777b538SAndroid Build Coastguard WorkerThis function only returns on error, and should replace the event core 215*6777b538SAndroid Build Coastguard Workerof the application program. 216*6777b538SAndroid Build Coastguard Worker.Pp 217*6777b538SAndroid Build Coastguard WorkerThe function 218*6777b538SAndroid Build Coastguard Worker.Fn event_set 219*6777b538SAndroid Build Coastguard Workerprepares the event structure 220*6777b538SAndroid Build Coastguard Worker.Fa ev 221*6777b538SAndroid Build Coastguard Workerto be used in future calls to 222*6777b538SAndroid Build Coastguard Worker.Fn event_add 223*6777b538SAndroid Build Coastguard Workerand 224*6777b538SAndroid Build Coastguard Worker.Fn event_del . 225*6777b538SAndroid Build Coastguard WorkerThe event will be prepared to call the function specified by the 226*6777b538SAndroid Build Coastguard Worker.Fa fn 227*6777b538SAndroid Build Coastguard Workerargument with an 228*6777b538SAndroid Build Coastguard Worker.Fa int 229*6777b538SAndroid Build Coastguard Workerargument indicating the file descriptor, a 230*6777b538SAndroid Build Coastguard Worker.Fa short 231*6777b538SAndroid Build Coastguard Workerargument indicating the type of event, and a 232*6777b538SAndroid Build Coastguard Worker.Fa void * 233*6777b538SAndroid Build Coastguard Workerargument given in the 234*6777b538SAndroid Build Coastguard Worker.Fa arg 235*6777b538SAndroid Build Coastguard Workerargument. 236*6777b538SAndroid Build Coastguard WorkerThe 237*6777b538SAndroid Build Coastguard Worker.Fa fd 238*6777b538SAndroid Build Coastguard Workerindicates the file descriptor that should be monitored for events. 239*6777b538SAndroid Build Coastguard WorkerThe events can be either 240*6777b538SAndroid Build Coastguard Worker.Va EV_READ , 241*6777b538SAndroid Build Coastguard Worker.Va EV_WRITE , 242*6777b538SAndroid Build Coastguard Workeror both, 243*6777b538SAndroid Build Coastguard Workerindicating that an application can read or write from the file descriptor 244*6777b538SAndroid Build Coastguard Workerrespectively without blocking. 245*6777b538SAndroid Build Coastguard Worker.Pp 246*6777b538SAndroid Build Coastguard WorkerThe function 247*6777b538SAndroid Build Coastguard Worker.Fa fn 248*6777b538SAndroid Build Coastguard Workerwill be called with the file descriptor that triggered the event and 249*6777b538SAndroid Build Coastguard Workerthe type of event which will be either 250*6777b538SAndroid Build Coastguard Worker.Va EV_TIMEOUT , 251*6777b538SAndroid Build Coastguard Worker.Va EV_SIGNAL , 252*6777b538SAndroid Build Coastguard Worker.Va EV_READ , 253*6777b538SAndroid Build Coastguard Workeror 254*6777b538SAndroid Build Coastguard Worker.Va EV_WRITE . 255*6777b538SAndroid Build Coastguard WorkerAdditionally, an event which has registered interest in more than one of the 256*6777b538SAndroid Build Coastguard Workerpreceeding events, via bitwise-OR to 257*6777b538SAndroid Build Coastguard Worker.Fn event_set , 258*6777b538SAndroid Build Coastguard Workercan provide its callback function with a bitwise-OR of more than one triggered 259*6777b538SAndroid Build Coastguard Workerevent. 260*6777b538SAndroid Build Coastguard WorkerThe additional flag 261*6777b538SAndroid Build Coastguard Worker.Va EV_PERSIST 262*6777b538SAndroid Build Coastguard Workermakes an 263*6777b538SAndroid Build Coastguard Worker.Fn event_add 264*6777b538SAndroid Build Coastguard Workerpersistent until 265*6777b538SAndroid Build Coastguard Worker.Fn event_del 266*6777b538SAndroid Build Coastguard Workerhas been called. 267*6777b538SAndroid Build Coastguard Worker.Pp 268*6777b538SAndroid Build Coastguard WorkerOnce initialized, the 269*6777b538SAndroid Build Coastguard Worker.Fa ev 270*6777b538SAndroid Build Coastguard Workerstructure can be used repeatedly with 271*6777b538SAndroid Build Coastguard Worker.Fn event_add 272*6777b538SAndroid Build Coastguard Workerand 273*6777b538SAndroid Build Coastguard Worker.Fn event_del 274*6777b538SAndroid Build Coastguard Workerand does not need to be reinitialized unless the function called and/or 275*6777b538SAndroid Build Coastguard Workerthe argument to it are to be changed. 276*6777b538SAndroid Build Coastguard WorkerHowever, when an 277*6777b538SAndroid Build Coastguard Worker.Fa ev 278*6777b538SAndroid Build Coastguard Workerstructure has been added to libevent using 279*6777b538SAndroid Build Coastguard Worker.Fn event_add 280*6777b538SAndroid Build Coastguard Workerthe structure must persist until the event occurs (assuming 281*6777b538SAndroid Build Coastguard Worker.Fa EV_PERSIST 282*6777b538SAndroid Build Coastguard Workeris not set) or is removed 283*6777b538SAndroid Build Coastguard Workerusing 284*6777b538SAndroid Build Coastguard Worker.Fn event_del . 285*6777b538SAndroid Build Coastguard WorkerYou may not reuse the same 286*6777b538SAndroid Build Coastguard Worker.Fa ev 287*6777b538SAndroid Build Coastguard Workerstructure for multiple monitored descriptors; each descriptor 288*6777b538SAndroid Build Coastguard Workerneeds its own 289*6777b538SAndroid Build Coastguard Worker.Fa ev . 290*6777b538SAndroid Build Coastguard Worker.Pp 291*6777b538SAndroid Build Coastguard WorkerThe function 292*6777b538SAndroid Build Coastguard Worker.Fn event_add 293*6777b538SAndroid Build Coastguard Workerschedules the execution of the 294*6777b538SAndroid Build Coastguard Worker.Fa ev 295*6777b538SAndroid Build Coastguard Workerevent when the event specified in 296*6777b538SAndroid Build Coastguard Worker.Fn event_set 297*6777b538SAndroid Build Coastguard Workeroccurs or in at least the time specified in the 298*6777b538SAndroid Build Coastguard Worker.Fa tv . 299*6777b538SAndroid Build Coastguard WorkerIf 300*6777b538SAndroid Build Coastguard Worker.Fa tv 301*6777b538SAndroid Build Coastguard Workeris 302*6777b538SAndroid Build Coastguard Worker.Dv NULL , 303*6777b538SAndroid Build Coastguard Workerno timeout occurs and the function will only be called 304*6777b538SAndroid Build Coastguard Workerif a matching event occurs on the file descriptor. 305*6777b538SAndroid Build Coastguard WorkerThe event in the 306*6777b538SAndroid Build Coastguard Worker.Fa ev 307*6777b538SAndroid Build Coastguard Workerargument must be already initialized by 308*6777b538SAndroid Build Coastguard Worker.Fn event_set 309*6777b538SAndroid Build Coastguard Workerand may not be used in calls to 310*6777b538SAndroid Build Coastguard Worker.Fn event_set 311*6777b538SAndroid Build Coastguard Workeruntil it has timed out or been removed with 312*6777b538SAndroid Build Coastguard Worker.Fn event_del . 313*6777b538SAndroid Build Coastguard WorkerIf the event in the 314*6777b538SAndroid Build Coastguard Worker.Fa ev 315*6777b538SAndroid Build Coastguard Workerargument already has a scheduled timeout, the old timeout will be 316*6777b538SAndroid Build Coastguard Workerreplaced by the new one. 317*6777b538SAndroid Build Coastguard Worker.Pp 318*6777b538SAndroid Build Coastguard WorkerThe function 319*6777b538SAndroid Build Coastguard Worker.Fn event_del 320*6777b538SAndroid Build Coastguard Workerwill cancel the event in the argument 321*6777b538SAndroid Build Coastguard Worker.Fa ev . 322*6777b538SAndroid Build Coastguard WorkerIf the event has already executed or has never been added 323*6777b538SAndroid Build Coastguard Workerthe call will have no effect. 324*6777b538SAndroid Build Coastguard Worker.Pp 325*6777b538SAndroid Build Coastguard WorkerThe functions 326*6777b538SAndroid Build Coastguard Worker.Fn evtimer_set , 327*6777b538SAndroid Build Coastguard Worker.Fn evtimer_add , 328*6777b538SAndroid Build Coastguard Worker.Fn evtimer_del , 329*6777b538SAndroid Build Coastguard Worker.Fn evtimer_initialized , 330*6777b538SAndroid Build Coastguard Workerand 331*6777b538SAndroid Build Coastguard Worker.Fn evtimer_pending 332*6777b538SAndroid Build Coastguard Workerare abbreviations for common situations where only a timeout is required. 333*6777b538SAndroid Build Coastguard WorkerThe file descriptor passed will be \-1, and the event type will be 334*6777b538SAndroid Build Coastguard Worker.Va EV_TIMEOUT . 335*6777b538SAndroid Build Coastguard Worker.Pp 336*6777b538SAndroid Build Coastguard WorkerThe functions 337*6777b538SAndroid Build Coastguard Worker.Fn signal_set , 338*6777b538SAndroid Build Coastguard Worker.Fn signal_add , 339*6777b538SAndroid Build Coastguard Worker.Fn signal_del , 340*6777b538SAndroid Build Coastguard Worker.Fn signal_initialized , 341*6777b538SAndroid Build Coastguard Workerand 342*6777b538SAndroid Build Coastguard Worker.Fn signal_pending 343*6777b538SAndroid Build Coastguard Workerare abbreviations. 344*6777b538SAndroid Build Coastguard WorkerThe event type will be a persistent 345*6777b538SAndroid Build Coastguard Worker.Va EV_SIGNAL . 346*6777b538SAndroid Build Coastguard WorkerThat means 347*6777b538SAndroid Build Coastguard Worker.Fn signal_set 348*6777b538SAndroid Build Coastguard Workeradds 349*6777b538SAndroid Build Coastguard Worker.Va EV_PERSIST . 350*6777b538SAndroid Build Coastguard Worker.Pp 351*6777b538SAndroid Build Coastguard WorkerIn order to avoid races in signal handlers, the 352*6777b538SAndroid Build Coastguard Worker.Nm event 353*6777b538SAndroid Build Coastguard WorkerAPI provides two variables: 354*6777b538SAndroid Build Coastguard Worker.Va event_sigcb 355*6777b538SAndroid Build Coastguard Workerand 356*6777b538SAndroid Build Coastguard Worker.Va event_gotsig . 357*6777b538SAndroid Build Coastguard WorkerA signal handler 358*6777b538SAndroid Build Coastguard Workersets 359*6777b538SAndroid Build Coastguard Worker.Va event_gotsig 360*6777b538SAndroid Build Coastguard Workerto indicate that a signal has been received. 361*6777b538SAndroid Build Coastguard WorkerThe application sets 362*6777b538SAndroid Build Coastguard Worker.Va event_sigcb 363*6777b538SAndroid Build Coastguard Workerto a callback function. 364*6777b538SAndroid Build Coastguard WorkerAfter the signal handler sets 365*6777b538SAndroid Build Coastguard Worker.Va event_gotsig , 366*6777b538SAndroid Build Coastguard Worker.Nm event_dispatch 367*6777b538SAndroid Build Coastguard Workerwill execute the callback function to process received signals. 368*6777b538SAndroid Build Coastguard WorkerThe callback returns 1 when no events are registered any more. 369*6777b538SAndroid Build Coastguard WorkerIt can return \-1 to indicate an error to the 370*6777b538SAndroid Build Coastguard Worker.Nm event 371*6777b538SAndroid Build Coastguard Workerlibrary, causing 372*6777b538SAndroid Build Coastguard Worker.Fn event_dispatch 373*6777b538SAndroid Build Coastguard Workerto terminate with 374*6777b538SAndroid Build Coastguard Worker.Va errno 375*6777b538SAndroid Build Coastguard Workerset to 376*6777b538SAndroid Build Coastguard Worker.Er EINTR . 377*6777b538SAndroid Build Coastguard Worker.Pp 378*6777b538SAndroid Build Coastguard WorkerThe function 379*6777b538SAndroid Build Coastguard Worker.Fn event_once 380*6777b538SAndroid Build Coastguard Workeris similar to 381*6777b538SAndroid Build Coastguard Worker.Fn event_set . 382*6777b538SAndroid Build Coastguard WorkerHowever, it schedules a callback to be called exactly once and does not 383*6777b538SAndroid Build Coastguard Workerrequire the caller to prepare an 384*6777b538SAndroid Build Coastguard Worker.Fa event 385*6777b538SAndroid Build Coastguard Workerstructure. 386*6777b538SAndroid Build Coastguard WorkerThis function supports 387*6777b538SAndroid Build Coastguard Worker.Fa EV_TIMEOUT , 388*6777b538SAndroid Build Coastguard Worker.Fa EV_READ , 389*6777b538SAndroid Build Coastguard Workerand 390*6777b538SAndroid Build Coastguard Worker.Fa EV_WRITE . 391*6777b538SAndroid Build Coastguard Worker.Pp 392*6777b538SAndroid Build Coastguard WorkerThe 393*6777b538SAndroid Build Coastguard Worker.Fn event_pending 394*6777b538SAndroid Build Coastguard Workerfunction can be used to check if the event specified by 395*6777b538SAndroid Build Coastguard Worker.Fa event 396*6777b538SAndroid Build Coastguard Workeris pending to run. 397*6777b538SAndroid Build Coastguard WorkerIf 398*6777b538SAndroid Build Coastguard Worker.Va EV_TIMEOUT 399*6777b538SAndroid Build Coastguard Workerwas specified and 400*6777b538SAndroid Build Coastguard Worker.Fa tv 401*6777b538SAndroid Build Coastguard Workeris not 402*6777b538SAndroid Build Coastguard Worker.Dv NULL , 403*6777b538SAndroid Build Coastguard Workerthe expiration time of the event will be returned in 404*6777b538SAndroid Build Coastguard Worker.Fa tv . 405*6777b538SAndroid Build Coastguard Worker.Pp 406*6777b538SAndroid Build Coastguard WorkerThe 407*6777b538SAndroid Build Coastguard Worker.Fn event_initialized 408*6777b538SAndroid Build Coastguard Workermacro can be used to check if an event has been initialized. 409*6777b538SAndroid Build Coastguard Worker.Pp 410*6777b538SAndroid Build Coastguard WorkerThe 411*6777b538SAndroid Build Coastguard Worker.Nm event_loop 412*6777b538SAndroid Build Coastguard Workerfunction provides an interface for single pass execution of pending 413*6777b538SAndroid Build Coastguard Workerevents. 414*6777b538SAndroid Build Coastguard WorkerThe flags 415*6777b538SAndroid Build Coastguard Worker.Va EVLOOP_ONCE 416*6777b538SAndroid Build Coastguard Workerand 417*6777b538SAndroid Build Coastguard Worker.Va EVLOOP_NONBLOCK 418*6777b538SAndroid Build Coastguard Workerare recognized. 419*6777b538SAndroid Build Coastguard WorkerThe 420*6777b538SAndroid Build Coastguard Worker.Nm event_loopexit 421*6777b538SAndroid Build Coastguard Workerfunction exits from the event loop. The next 422*6777b538SAndroid Build Coastguard Worker.Fn event_loop 423*6777b538SAndroid Build Coastguard Workeriteration after the 424*6777b538SAndroid Build Coastguard Workergiven timer expires will complete normally (handling all queued events) then 425*6777b538SAndroid Build Coastguard Workerexit without blocking for events again. Subsequent invocations of 426*6777b538SAndroid Build Coastguard Worker.Fn event_loop 427*6777b538SAndroid Build Coastguard Workerwill proceed normally. 428*6777b538SAndroid Build Coastguard WorkerThe 429*6777b538SAndroid Build Coastguard Worker.Nm event_loopbreak 430*6777b538SAndroid Build Coastguard Workerfunction exits from the event loop immediately. 431*6777b538SAndroid Build Coastguard Worker.Fn event_loop 432*6777b538SAndroid Build Coastguard Workerwill abort after the next event is completed; 433*6777b538SAndroid Build Coastguard Worker.Fn event_loopbreak 434*6777b538SAndroid Build Coastguard Workeris typically invoked from this event's callback. This behavior is analogous 435*6777b538SAndroid Build Coastguard Workerto the "break;" statement. Subsequent invocations of 436*6777b538SAndroid Build Coastguard Worker.Fn event_loop 437*6777b538SAndroid Build Coastguard Workerwill proceed normally. 438*6777b538SAndroid Build Coastguard Worker.Pp 439*6777b538SAndroid Build Coastguard WorkerIt is the responsibility of the caller to provide these functions with 440*6777b538SAndroid Build Coastguard Workerpre-allocated event structures. 441*6777b538SAndroid Build Coastguard Worker.Pp 442*6777b538SAndroid Build Coastguard Worker.Sh EVENT PRIORITIES 443*6777b538SAndroid Build Coastguard WorkerBy default 444*6777b538SAndroid Build Coastguard Worker.Nm libevent 445*6777b538SAndroid Build Coastguard Workerschedules all active events with the same priority. 446*6777b538SAndroid Build Coastguard WorkerHowever, sometimes it is desirable to process some events with a higher 447*6777b538SAndroid Build Coastguard Workerpriority than others. 448*6777b538SAndroid Build Coastguard WorkerFor that reason, 449*6777b538SAndroid Build Coastguard Worker.Nm libevent 450*6777b538SAndroid Build Coastguard Workersupports strict priority queues. 451*6777b538SAndroid Build Coastguard WorkerActive events with a lower priority are always processed before events 452*6777b538SAndroid Build Coastguard Workerwith a higher priority. 453*6777b538SAndroid Build Coastguard Worker.Pp 454*6777b538SAndroid Build Coastguard WorkerThe number of different priorities can be set initially with the 455*6777b538SAndroid Build Coastguard Worker.Fn event_priority_init 456*6777b538SAndroid Build Coastguard Workerfunction. 457*6777b538SAndroid Build Coastguard WorkerThis function should be called before the first call to 458*6777b538SAndroid Build Coastguard Worker.Fn event_dispatch . 459*6777b538SAndroid Build Coastguard WorkerThe 460*6777b538SAndroid Build Coastguard Worker.Fn event_priority_set 461*6777b538SAndroid Build Coastguard Workerfunction can be used to assign a priority to an event. 462*6777b538SAndroid Build Coastguard WorkerBy default, 463*6777b538SAndroid Build Coastguard Worker.Nm libevent 464*6777b538SAndroid Build Coastguard Workerassigns the middle priority to all events unless their priority 465*6777b538SAndroid Build Coastguard Workeris explicitly set. 466*6777b538SAndroid Build Coastguard Worker.Sh THREAD SAFE EVENTS 467*6777b538SAndroid Build Coastguard Worker.Nm Libevent 468*6777b538SAndroid Build Coastguard Workerhas experimental support for thread-safe events. 469*6777b538SAndroid Build Coastguard WorkerWhen initializing the library via 470*6777b538SAndroid Build Coastguard Worker.Fn event_init , 471*6777b538SAndroid Build Coastguard Workeran event base is returned. 472*6777b538SAndroid Build Coastguard WorkerThis event base can be used in conjunction with calls to 473*6777b538SAndroid Build Coastguard Worker.Fn event_base_set , 474*6777b538SAndroid Build Coastguard Worker.Fn event_base_dispatch , 475*6777b538SAndroid Build Coastguard Worker.Fn event_base_loop , 476*6777b538SAndroid Build Coastguard Worker.Fn event_base_loopexit , 477*6777b538SAndroid Build Coastguard Worker.Fn bufferevent_base_set 478*6777b538SAndroid Build Coastguard Workerand 479*6777b538SAndroid Build Coastguard Worker.Fn event_base_free . 480*6777b538SAndroid Build Coastguard Worker.Fn event_base_set 481*6777b538SAndroid Build Coastguard Workershould be called after preparing an event with 482*6777b538SAndroid Build Coastguard Worker.Fn event_set , 483*6777b538SAndroid Build Coastguard Workeras 484*6777b538SAndroid Build Coastguard Worker.Fn event_set 485*6777b538SAndroid Build Coastguard Workerassigns the provided event to the most recently created event base. 486*6777b538SAndroid Build Coastguard Worker.Fn bufferevent_base_set 487*6777b538SAndroid Build Coastguard Workershould be called after preparing a bufferevent with 488*6777b538SAndroid Build Coastguard Worker.Fn bufferevent_new . 489*6777b538SAndroid Build Coastguard Worker.Fn event_base_free 490*6777b538SAndroid Build Coastguard Workershould be used to free memory associated with the event base 491*6777b538SAndroid Build Coastguard Workerwhen it is no longer needed. 492*6777b538SAndroid Build Coastguard Worker.Sh BUFFERED EVENTS 493*6777b538SAndroid Build Coastguard Worker.Nm libevent 494*6777b538SAndroid Build Coastguard Workerprovides an abstraction on top of the regular event callbacks. 495*6777b538SAndroid Build Coastguard WorkerThis abstraction is called a 496*6777b538SAndroid Build Coastguard Worker.Va "buffered event" . 497*6777b538SAndroid Build Coastguard WorkerA buffered event provides input and output buffers that get filled 498*6777b538SAndroid Build Coastguard Workerand drained automatically. 499*6777b538SAndroid Build Coastguard WorkerThe user of a buffered event no longer deals directly with the IO, 500*6777b538SAndroid Build Coastguard Workerbut instead is reading from input and writing to output buffers. 501*6777b538SAndroid Build Coastguard Worker.Pp 502*6777b538SAndroid Build Coastguard WorkerA new bufferevent is created by 503*6777b538SAndroid Build Coastguard Worker.Fn bufferevent_new . 504*6777b538SAndroid Build Coastguard WorkerThe parameter 505*6777b538SAndroid Build Coastguard Worker.Fa fd 506*6777b538SAndroid Build Coastguard Workerspecifies the file descriptor from which data is read and written to. 507*6777b538SAndroid Build Coastguard WorkerThis file descriptor is not allowed to be a 508*6777b538SAndroid Build Coastguard Worker.Xr pipe 2 . 509*6777b538SAndroid Build Coastguard WorkerThe next three parameters are callbacks. 510*6777b538SAndroid Build Coastguard WorkerThe read and write callback have the following form: 511*6777b538SAndroid Build Coastguard Worker.Ft void 512*6777b538SAndroid Build Coastguard Worker.Fn "(*cb)" "struct bufferevent *bufev" "void *arg" . 513*6777b538SAndroid Build Coastguard WorkerThe error callback has the following form: 514*6777b538SAndroid Build Coastguard Worker.Ft void 515*6777b538SAndroid Build Coastguard Worker.Fn "(*cb)" "struct bufferevent *bufev" "short what" "void *arg" . 516*6777b538SAndroid Build Coastguard WorkerThe argument is specified by the fourth parameter 517*6777b538SAndroid Build Coastguard Worker.Fa "cbarg" . 518*6777b538SAndroid Build Coastguard WorkerA 519*6777b538SAndroid Build Coastguard Worker.Fa bufferevent struct 520*6777b538SAndroid Build Coastguard Workerpointer is returned on success, NULL on error. 521*6777b538SAndroid Build Coastguard WorkerBoth the read and the write callback may be NULL. 522*6777b538SAndroid Build Coastguard WorkerThe error callback has to be always provided. 523*6777b538SAndroid Build Coastguard Worker.Pp 524*6777b538SAndroid Build Coastguard WorkerOnce initialized, the bufferevent structure can be used repeatedly with 525*6777b538SAndroid Build Coastguard Workerbufferevent_enable() and bufferevent_disable(). 526*6777b538SAndroid Build Coastguard WorkerThe flags parameter can be a combination of 527*6777b538SAndroid Build Coastguard Worker.Va EV_READ 528*6777b538SAndroid Build Coastguard Workerand 529*6777b538SAndroid Build Coastguard Worker.Va EV_WRITE . 530*6777b538SAndroid Build Coastguard WorkerWhen read enabled the bufferevent will try to read from the file 531*6777b538SAndroid Build Coastguard Workerdescriptor and call the read callback. 532*6777b538SAndroid Build Coastguard WorkerThe write callback is executed 533*6777b538SAndroid Build Coastguard Workerwhenever the output buffer is drained below the write low watermark, 534*6777b538SAndroid Build Coastguard Workerwhich is 535*6777b538SAndroid Build Coastguard Worker.Va 0 536*6777b538SAndroid Build Coastguard Workerby default. 537*6777b538SAndroid Build Coastguard Worker.Pp 538*6777b538SAndroid Build Coastguard WorkerThe 539*6777b538SAndroid Build Coastguard Worker.Fn bufferevent_write 540*6777b538SAndroid Build Coastguard Workerfunction can be used to write data to the file descriptor. 541*6777b538SAndroid Build Coastguard WorkerThe data is appended to the output buffer and written to the descriptor 542*6777b538SAndroid Build Coastguard Workerautomatically as it becomes available for writing. 543*6777b538SAndroid Build Coastguard Worker.Fn bufferevent_write 544*6777b538SAndroid Build Coastguard Workerreturns 0 on success or \-1 on failure. 545*6777b538SAndroid Build Coastguard WorkerThe 546*6777b538SAndroid Build Coastguard Worker.Fn bufferevent_read 547*6777b538SAndroid Build Coastguard Workerfunction is used to read data from the input buffer, 548*6777b538SAndroid Build Coastguard Workerreturning the amount of data read. 549*6777b538SAndroid Build Coastguard Worker.Pp 550*6777b538SAndroid Build Coastguard WorkerIf multiple bases are in use, bufferevent_base_set() must be called before 551*6777b538SAndroid Build Coastguard Workerenabling the bufferevent for the first time. 552*6777b538SAndroid Build Coastguard Worker.Sh NON-BLOCKING HTTP SUPPORT 553*6777b538SAndroid Build Coastguard Worker.Nm libevent 554*6777b538SAndroid Build Coastguard Workerprovides a very thin HTTP layer that can be used both to host an HTTP 555*6777b538SAndroid Build Coastguard Workerserver and also to make HTTP requests. 556*6777b538SAndroid Build Coastguard WorkerAn HTTP server can be created by calling 557*6777b538SAndroid Build Coastguard Worker.Fn evhttp_new . 558*6777b538SAndroid Build Coastguard WorkerIt can be bound to any port and address with the 559*6777b538SAndroid Build Coastguard Worker.Fn evhttp_bind_socket 560*6777b538SAndroid Build Coastguard Workerfunction. 561*6777b538SAndroid Build Coastguard WorkerWhen the HTTP server is no longer used, it can be freed via 562*6777b538SAndroid Build Coastguard Worker.Fn evhttp_free . 563*6777b538SAndroid Build Coastguard Worker.Pp 564*6777b538SAndroid Build Coastguard WorkerTo be notified of HTTP requests, a user needs to register callbacks with the 565*6777b538SAndroid Build Coastguard WorkerHTTP server. 566*6777b538SAndroid Build Coastguard WorkerThis can be done by calling 567*6777b538SAndroid Build Coastguard Worker.Fn evhttp_set_cb . 568*6777b538SAndroid Build Coastguard WorkerThe second argument is the URI for which a callback is being registered. 569*6777b538SAndroid Build Coastguard WorkerThe corresponding callback will receive an 570*6777b538SAndroid Build Coastguard Worker.Va struct evhttp_request 571*6777b538SAndroid Build Coastguard Workerobject that contains all information about the request. 572*6777b538SAndroid Build Coastguard Worker.Pp 573*6777b538SAndroid Build Coastguard WorkerThis section does not document all the possible function calls; please 574*6777b538SAndroid Build Coastguard Workercheck 575*6777b538SAndroid Build Coastguard Worker.Va event.h 576*6777b538SAndroid Build Coastguard Workerfor the public interfaces. 577*6777b538SAndroid Build Coastguard Worker.Sh ADDITIONAL NOTES 578*6777b538SAndroid Build Coastguard WorkerIt is possible to disable support for 579*6777b538SAndroid Build Coastguard Worker.Va epoll , kqueue , devpoll , poll 580*6777b538SAndroid Build Coastguard Workeror 581*6777b538SAndroid Build Coastguard Worker.Va select 582*6777b538SAndroid Build Coastguard Workerby setting the environment variable 583*6777b538SAndroid Build Coastguard Worker.Va EVENT_NOEPOLL , EVENT_NOKQUEUE , EVENT_NODEVPOLL , EVENT_NOPOLL 584*6777b538SAndroid Build Coastguard Workeror 585*6777b538SAndroid Build Coastguard Worker.Va EVENT_NOSELECT , 586*6777b538SAndroid Build Coastguard Workerrespectively. 587*6777b538SAndroid Build Coastguard WorkerBy setting the environment variable 588*6777b538SAndroid Build Coastguard Worker.Va EVENT_SHOW_METHOD , 589*6777b538SAndroid Build Coastguard Worker.Nm libevent 590*6777b538SAndroid Build Coastguard Workerdisplays the kernel notification method that it uses. 591*6777b538SAndroid Build Coastguard Worker.Sh RETURN VALUES 592*6777b538SAndroid Build Coastguard WorkerUpon successful completion 593*6777b538SAndroid Build Coastguard Worker.Fn event_add 594*6777b538SAndroid Build Coastguard Workerand 595*6777b538SAndroid Build Coastguard Worker.Fn event_del 596*6777b538SAndroid Build Coastguard Workerreturn 0. 597*6777b538SAndroid Build Coastguard WorkerOtherwise, \-1 is returned and the global variable errno is 598*6777b538SAndroid Build Coastguard Workerset to indicate the error. 599*6777b538SAndroid Build Coastguard Worker.Sh SEE ALSO 600*6777b538SAndroid Build Coastguard Worker.Xr kqueue 2 , 601*6777b538SAndroid Build Coastguard Worker.Xr poll 2 , 602*6777b538SAndroid Build Coastguard Worker.Xr select 2 , 603*6777b538SAndroid Build Coastguard Worker.Xr evdns 3 , 604*6777b538SAndroid Build Coastguard Worker.Xr timeout 9 605*6777b538SAndroid Build Coastguard Worker.Sh HISTORY 606*6777b538SAndroid Build Coastguard WorkerThe 607*6777b538SAndroid Build Coastguard Worker.Nm event 608*6777b538SAndroid Build Coastguard WorkerAPI manpage is based on the 609*6777b538SAndroid Build Coastguard Worker.Xr timeout 9 610*6777b538SAndroid Build Coastguard Workermanpage by Artur Grabowski. 611*6777b538SAndroid Build Coastguard WorkerThe port of 612*6777b538SAndroid Build Coastguard Worker.Nm libevent 613*6777b538SAndroid Build Coastguard Workerto Windows is due to Michael A. Davis. 614*6777b538SAndroid Build Coastguard WorkerSupport for real-time signals is due to Taral. 615*6777b538SAndroid Build Coastguard Worker.Sh AUTHORS 616*6777b538SAndroid Build Coastguard WorkerThe 617*6777b538SAndroid Build Coastguard Worker.Nm event 618*6777b538SAndroid Build Coastguard Workerlibrary was written by Niels Provos. 619*6777b538SAndroid Build Coastguard Worker.Sh BUGS 620*6777b538SAndroid Build Coastguard WorkerThis documentation is neither complete nor authoritative. 621*6777b538SAndroid Build Coastguard WorkerIf you are in doubt about the usage of this API then 622*6777b538SAndroid Build Coastguard Workercheck the source code to find out how it works, write 623*6777b538SAndroid Build Coastguard Workerup the missing piece of documentation and send it to 624*6777b538SAndroid Build Coastguard Workerme for inclusion in this man page. 625