| Index: third_party/libevent/event.3
|
| diff --git a/third_party/libevent/event.3 b/third_party/libevent/event.3
|
| deleted file mode 100644
|
| index 5b33ec64a935baaa7aefc44f5ed48d0a139653f6..0000000000000000000000000000000000000000
|
| --- a/third_party/libevent/event.3
|
| +++ /dev/null
|
| @@ -1,624 +0,0 @@
|
| -.\" $OpenBSD: event.3,v 1.4 2002/07/12 18:50:48 provos Exp $
|
| -.\"
|
| -.\" Copyright (c) 2000 Artur Grabowski <art@openbsd.org>
|
| -.\" All rights reserved.
|
| -.\"
|
| -.\" Redistribution and use in source and binary forms, with or without
|
| -.\" modification, are permitted provided that the following conditions
|
| -.\" are met:
|
| -.\"
|
| -.\" 1. Redistributions of source code must retain the above copyright
|
| -.\" notice, this list of conditions and the following disclaimer.
|
| -.\" 2. Redistributions in binary form must reproduce the above copyright
|
| -.\" notice, this list of conditions and the following disclaimer in the
|
| -.\" documentation and/or other materials provided with the distribution.
|
| -.\" 3. The name of the author may not be used to endorse or promote products
|
| -.\" derived from this software without specific prior written permission.
|
| -.\"
|
| -.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
| -.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
| -.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
| -.\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| -.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| -.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
| -.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
| -.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
| -.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
| -.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| -.\"
|
| -.Dd August 8, 2000
|
| -.Dt EVENT 3
|
| -.Os
|
| -.Sh NAME
|
| -.Nm event_init ,
|
| -.Nm event_dispatch ,
|
| -.Nm event_loop ,
|
| -.Nm event_loopexit ,
|
| -.Nm event_loopbreak ,
|
| -.Nm event_set ,
|
| -.Nm event_base_dispatch ,
|
| -.Nm event_base_loop ,
|
| -.Nm event_base_loopexit ,
|
| -.Nm event_base_loopbreak ,
|
| -.Nm event_base_set ,
|
| -.Nm event_base_free ,
|
| -.Nm event_add ,
|
| -.Nm event_del ,
|
| -.Nm event_once ,
|
| -.Nm event_base_once ,
|
| -.Nm event_pending ,
|
| -.Nm event_initialized ,
|
| -.Nm event_priority_init ,
|
| -.Nm event_priority_set ,
|
| -.Nm evtimer_set ,
|
| -.Nm evtimer_add ,
|
| -.Nm evtimer_del ,
|
| -.Nm evtimer_pending ,
|
| -.Nm evtimer_initialized ,
|
| -.Nm signal_set ,
|
| -.Nm signal_add ,
|
| -.Nm signal_del ,
|
| -.Nm signal_pending ,
|
| -.Nm signal_initialized ,
|
| -.Nm bufferevent_new ,
|
| -.Nm bufferevent_free ,
|
| -.Nm bufferevent_write ,
|
| -.Nm bufferevent_write_buffer ,
|
| -.Nm bufferevent_read ,
|
| -.Nm bufferevent_enable ,
|
| -.Nm bufferevent_disable ,
|
| -.Nm bufferevent_settimeout ,
|
| -.Nm bufferevent_base_set ,
|
| -.Nm evbuffer_new ,
|
| -.Nm evbuffer_free ,
|
| -.Nm evbuffer_add ,
|
| -.Nm evbuffer_add_buffer ,
|
| -.Nm evbuffer_add_printf ,
|
| -.Nm evbuffer_add_vprintf ,
|
| -.Nm evbuffer_drain ,
|
| -.Nm evbuffer_write ,
|
| -.Nm evbuffer_read ,
|
| -.Nm evbuffer_find ,
|
| -.Nm evbuffer_readline ,
|
| -.Nm evhttp_new ,
|
| -.Nm evhttp_bind_socket ,
|
| -.Nm evhttp_free
|
| -.Nd execute a function when a specific event occurs
|
| -.Sh SYNOPSIS
|
| -.Fd #include <sys/time.h>
|
| -.Fd #include <event.h>
|
| -.Ft "struct event_base *"
|
| -.Fn "event_init" "void"
|
| -.Ft int
|
| -.Fn "event_dispatch" "void"
|
| -.Ft int
|
| -.Fn "event_loop" "int flags"
|
| -.Ft int
|
| -.Fn "event_loopexit" "struct timeval *tv"
|
| -.Ft int
|
| -.Fn "event_loopbreak" "void"
|
| -.Ft void
|
| -.Fn "event_set" "struct event *ev" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg"
|
| -.Ft int
|
| -.Fn "event_base_dispatch" "struct event_base *base"
|
| -.Ft int
|
| -.Fn "event_base_loop" "struct event_base *base" "int flags"
|
| -.Ft int
|
| -.Fn "event_base_loopexit" "struct event_base *base" "struct timeval *tv"
|
| -.Ft int
|
| -.Fn "event_base_loopbreak" "struct event_base *base"
|
| -.Ft int
|
| -.Fn "event_base_set" "struct event_base *base" "struct event *"
|
| -.Ft void
|
| -.Fn "event_base_free" "struct event_base *base"
|
| -.Ft int
|
| -.Fn "event_add" "struct event *ev" "struct timeval *tv"
|
| -.Ft int
|
| -.Fn "event_del" "struct event *ev"
|
| -.Ft int
|
| -.Fn "event_once" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg" "struct timeval *tv"
|
| -.Ft int
|
| -.Fn "event_base_once" "struct event_base *base" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg" "struct timeval *tv"
|
| -.Ft int
|
| -.Fn "event_pending" "struct event *ev" "short event" "struct timeval *tv"
|
| -.Ft int
|
| -.Fn "event_initialized" "struct event *ev"
|
| -.Ft int
|
| -.Fn "event_priority_init" "int npriorities"
|
| -.Ft int
|
| -.Fn "event_priority_set" "struct event *ev" "int priority"
|
| -.Ft void
|
| -.Fn "evtimer_set" "struct event *ev" "void (*fn)(int, short, void *)" "void *arg"
|
| -.Ft void
|
| -.Fn "evtimer_add" "struct event *ev" "struct timeval *"
|
| -.Ft void
|
| -.Fn "evtimer_del" "struct event *ev"
|
| -.Ft int
|
| -.Fn "evtimer_pending" "struct event *ev" "struct timeval *tv"
|
| -.Ft int
|
| -.Fn "evtimer_initialized" "struct event *ev"
|
| -.Ft void
|
| -.Fn "signal_set" "struct event *ev" "int signal" "void (*fn)(int, short, void *)" "void *arg"
|
| -.Ft void
|
| -.Fn "signal_add" "struct event *ev" "struct timeval *"
|
| -.Ft void
|
| -.Fn "signal_del" "struct event *ev"
|
| -.Ft int
|
| -.Fn "signal_pending" "struct event *ev" "struct timeval *tv"
|
| -.Ft int
|
| -.Fn "signal_initialized" "struct event *ev"
|
| -.Ft "struct bufferevent *"
|
| -.Fn "bufferevent_new" "int fd" "evbuffercb readcb" "evbuffercb writecb" "everrorcb" "void *cbarg"
|
| -.Ft void
|
| -.Fn "bufferevent_free" "struct bufferevent *bufev"
|
| -.Ft int
|
| -.Fn "bufferevent_write" "struct bufferevent *bufev" "void *data" "size_t size"
|
| -.Ft int
|
| -.Fn "bufferevent_write_buffer" "struct bufferevent *bufev" "struct evbuffer *buf"
|
| -.Ft size_t
|
| -.Fn "bufferevent_read" "struct bufferevent *bufev" "void *data" "size_t size"
|
| -.Ft int
|
| -.Fn "bufferevent_enable" "struct bufferevent *bufev" "short event"
|
| -.Ft int
|
| -.Fn "bufferevent_disable" "struct bufferevent *bufev" "short event"
|
| -.Ft void
|
| -.Fn "bufferevent_settimeout" "struct bufferevent *bufev" "int timeout_read" "int timeout_write"
|
| -.Ft int
|
| -.Fn "bufferevent_base_set" "struct event_base *base" "struct bufferevent *bufev"
|
| -.Ft "struct evbuffer *"
|
| -.Fn "evbuffer_new" "void"
|
| -.Ft void
|
| -.Fn "evbuffer_free" "struct evbuffer *buf"
|
| -.Ft int
|
| -.Fn "evbuffer_add" "struct evbuffer *buf" "const void *data" "size_t size"
|
| -.Ft int
|
| -.Fn "evbuffer_add_buffer" "struct evbuffer *dst" "struct evbuffer *src"
|
| -.Ft int
|
| -.Fn "evbuffer_add_printf" "struct evbuffer *buf" "const char *fmt" "..."
|
| -.Ft int
|
| -.Fn "evbuffer_add_vprintf" "struct evbuffer *buf" "const char *fmt" "va_list ap"
|
| -.Ft void
|
| -.Fn "evbuffer_drain" "struct evbuffer *buf" "size_t size"
|
| -.Ft int
|
| -.Fn "evbuffer_write" "struct evbuffer *buf" "int fd"
|
| -.Ft int
|
| -.Fn "evbuffer_read" "struct evbuffer *buf" "int fd" "int size"
|
| -.Ft "u_char *"
|
| -.Fn "evbuffer_find" "struct evbuffer *buf" "const u_char *data" "size_t size"
|
| -.Ft "char *"
|
| -.Fn "evbuffer_readline" "struct evbuffer *buf"
|
| -.Ft "struct evhttp *"
|
| -.Fn "evhttp_new" "struct event_base *base"
|
| -.Ft int
|
| -.Fn "evhttp_bind_socket" "struct evhttp *http" "const char *address" "u_short port"
|
| -.Ft "void"
|
| -.Fn "evhttp_free" "struct evhttp *http"
|
| -.Ft int
|
| -.Fa (*event_sigcb)(void) ;
|
| -.Ft volatile sig_atomic_t
|
| -.Fa event_gotsig ;
|
| -.Sh DESCRIPTION
|
| -The
|
| -.Nm event
|
| -API provides a mechanism to execute a function when a specific event
|
| -on a file descriptor occurs or after a given time has passed.
|
| -.Pp
|
| -The
|
| -.Nm event
|
| -API needs to be initialized with
|
| -.Fn event_init
|
| -before it can be used.
|
| -.Pp
|
| -In order to process events, an application needs to call
|
| -.Fn event_dispatch .
|
| -This function only returns on error, and should replace the event core
|
| -of the application program.
|
| -.Pp
|
| -The function
|
| -.Fn event_set
|
| -prepares the event structure
|
| -.Fa ev
|
| -to be used in future calls to
|
| -.Fn event_add
|
| -and
|
| -.Fn event_del .
|
| -The event will be prepared to call the function specified by the
|
| -.Fa fn
|
| -argument with an
|
| -.Fa int
|
| -argument indicating the file descriptor, a
|
| -.Fa short
|
| -argument indicating the type of event, and a
|
| -.Fa void *
|
| -argument given in the
|
| -.Fa arg
|
| -argument.
|
| -The
|
| -.Fa fd
|
| -indicates the file descriptor that should be monitored for events.
|
| -The events can be either
|
| -.Va EV_READ ,
|
| -.Va EV_WRITE ,
|
| -or both,
|
| -indicating that an application can read or write from the file descriptor
|
| -respectively without blocking.
|
| -.Pp
|
| -The function
|
| -.Fa fn
|
| -will be called with the file descriptor that triggered the event and
|
| -the type of event which will be either
|
| -.Va EV_TIMEOUT ,
|
| -.Va EV_SIGNAL ,
|
| -.Va EV_READ ,
|
| -or
|
| -.Va EV_WRITE .
|
| -Additionally, an event which has registered interest in more than one of the
|
| -preceeding events, via bitwise-OR to
|
| -.Fn event_set ,
|
| -can provide its callback function with a bitwise-OR of more than one triggered
|
| -event.
|
| -The additional flag
|
| -.Va EV_PERSIST
|
| -makes an
|
| -.Fn event_add
|
| -persistent until
|
| -.Fn event_del
|
| -has been called.
|
| -.Pp
|
| -Once initialized, the
|
| -.Fa ev
|
| -structure can be used repeatedly with
|
| -.Fn event_add
|
| -and
|
| -.Fn event_del
|
| -and does not need to be reinitialized unless the function called and/or
|
| -the argument to it are to be changed.
|
| -However, when an
|
| -.Fa ev
|
| -structure has been added to libevent using
|
| -.Fn event_add
|
| -the structure must persist until the event occurs (assuming
|
| -.Fa EV_PERSIST
|
| -is not set) or is removed
|
| -using
|
| -.Fn event_del .
|
| -You may not reuse the same
|
| -.Fa ev
|
| -structure for multiple monitored descriptors; each descriptor
|
| -needs its own
|
| -.Fa ev .
|
| -.Pp
|
| -The function
|
| -.Fn event_add
|
| -schedules the execution of the
|
| -.Fa ev
|
| -event when the event specified in
|
| -.Fn event_set
|
| -occurs or in at least the time specified in the
|
| -.Fa tv .
|
| -If
|
| -.Fa tv
|
| -is
|
| -.Dv NULL ,
|
| -no timeout occurs and the function will only be called
|
| -if a matching event occurs on the file descriptor.
|
| -The event in the
|
| -.Fa ev
|
| -argument must be already initialized by
|
| -.Fn event_set
|
| -and may not be used in calls to
|
| -.Fn event_set
|
| -until it has timed out or been removed with
|
| -.Fn event_del .
|
| -If the event in the
|
| -.Fa ev
|
| -argument already has a scheduled timeout, the old timeout will be
|
| -replaced by the new one.
|
| -.Pp
|
| -The function
|
| -.Fn event_del
|
| -will cancel the event in the argument
|
| -.Fa ev .
|
| -If the event has already executed or has never been added
|
| -the call will have no effect.
|
| -.Pp
|
| -The functions
|
| -.Fn evtimer_set ,
|
| -.Fn evtimer_add ,
|
| -.Fn evtimer_del ,
|
| -.Fn evtimer_initialized ,
|
| -and
|
| -.Fn evtimer_pending
|
| -are abbreviations for common situations where only a timeout is required.
|
| -The file descriptor passed will be \-1, and the event type will be
|
| -.Va EV_TIMEOUT .
|
| -.Pp
|
| -The functions
|
| -.Fn signal_set ,
|
| -.Fn signal_add ,
|
| -.Fn signal_del ,
|
| -.Fn signal_initialized ,
|
| -and
|
| -.Fn signal_pending
|
| -are abbreviations.
|
| -The event type will be a persistent
|
| -.Va EV_SIGNAL .
|
| -That means
|
| -.Fn signal_set
|
| -adds
|
| -.Va EV_PERSIST .
|
| -.Pp
|
| -In order to avoid races in signal handlers, the
|
| -.Nm event
|
| -API provides two variables:
|
| -.Va event_sigcb
|
| -and
|
| -.Va event_gotsig .
|
| -A signal handler
|
| -sets
|
| -.Va event_gotsig
|
| -to indicate that a signal has been received.
|
| -The application sets
|
| -.Va event_sigcb
|
| -to a callback function.
|
| -After the signal handler sets
|
| -.Va event_gotsig ,
|
| -.Nm event_dispatch
|
| -will execute the callback function to process received signals.
|
| -The callback returns 1 when no events are registered any more.
|
| -It can return \-1 to indicate an error to the
|
| -.Nm event
|
| -library, causing
|
| -.Fn event_dispatch
|
| -to terminate with
|
| -.Va errno
|
| -set to
|
| -.Er EINTR .
|
| -.Pp
|
| -The function
|
| -.Fn event_once
|
| -is similar to
|
| -.Fn event_set .
|
| -However, it schedules a callback to be called exactly once and does not
|
| -require the caller to prepare an
|
| -.Fa event
|
| -structure.
|
| -This function supports
|
| -.Fa EV_TIMEOUT ,
|
| -.Fa EV_READ ,
|
| -and
|
| -.Fa EV_WRITE .
|
| -.Pp
|
| -The
|
| -.Fn event_pending
|
| -function can be used to check if the event specified by
|
| -.Fa event
|
| -is pending to run.
|
| -If
|
| -.Va EV_TIMEOUT
|
| -was specified and
|
| -.Fa tv
|
| -is not
|
| -.Dv NULL ,
|
| -the expiration time of the event will be returned in
|
| -.Fa tv .
|
| -.Pp
|
| -The
|
| -.Fn event_initialized
|
| -macro can be used to check if an event has been initialized.
|
| -.Pp
|
| -The
|
| -.Nm event_loop
|
| -function provides an interface for single pass execution of pending
|
| -events.
|
| -The flags
|
| -.Va EVLOOP_ONCE
|
| -and
|
| -.Va EVLOOP_NONBLOCK
|
| -are recognized.
|
| -The
|
| -.Nm event_loopexit
|
| -function exits from the event loop. The next
|
| -.Fn event_loop
|
| -iteration after the
|
| -given timer expires will complete normally (handling all queued events) then
|
| -exit without blocking for events again. Subsequent invocations of
|
| -.Fn event_loop
|
| -will proceed normally.
|
| -The
|
| -.Nm event_loopbreak
|
| -function exits from the event loop immediately.
|
| -.Fn event_loop
|
| -will abort after the next event is completed;
|
| -.Fn event_loopbreak
|
| -is typically invoked from this event's callback. This behavior is analogous
|
| -to the "break;" statement. Subsequent invocations of
|
| -.Fn event_loop
|
| -will proceed normally.
|
| -.Pp
|
| -It is the responsibility of the caller to provide these functions with
|
| -pre-allocated event structures.
|
| -.Pp
|
| -.Sh EVENT PRIORITIES
|
| -By default
|
| -.Nm libevent
|
| -schedules all active events with the same priority.
|
| -However, sometimes it is desirable to process some events with a higher
|
| -priority than others.
|
| -For that reason,
|
| -.Nm libevent
|
| -supports strict priority queues.
|
| -Active events with a lower priority are always processed before events
|
| -with a higher priority.
|
| -.Pp
|
| -The number of different priorities can be set initially with the
|
| -.Fn event_priority_init
|
| -function.
|
| -This function should be called before the first call to
|
| -.Fn event_dispatch .
|
| -The
|
| -.Fn event_priority_set
|
| -function can be used to assign a priority to an event.
|
| -By default,
|
| -.Nm libevent
|
| -assigns the middle priority to all events unless their priority
|
| -is explicitly set.
|
| -.Sh THREAD SAFE EVENTS
|
| -.Nm Libevent
|
| -has experimental support for thread-safe events.
|
| -When initializing the library via
|
| -.Fn event_init ,
|
| -an event base is returned.
|
| -This event base can be used in conjunction with calls to
|
| -.Fn event_base_set ,
|
| -.Fn event_base_dispatch ,
|
| -.Fn event_base_loop ,
|
| -.Fn event_base_loopexit ,
|
| -.Fn bufferevent_base_set
|
| -and
|
| -.Fn event_base_free .
|
| -.Fn event_base_set
|
| -should be called after preparing an event with
|
| -.Fn event_set ,
|
| -as
|
| -.Fn event_set
|
| -assigns the provided event to the most recently created event base.
|
| -.Fn bufferevent_base_set
|
| -should be called after preparing a bufferevent with
|
| -.Fn bufferevent_new .
|
| -.Fn event_base_free
|
| -should be used to free memory associated with the event base
|
| -when it is no longer needed.
|
| -.Sh BUFFERED EVENTS
|
| -.Nm libevent
|
| -provides an abstraction on top of the regular event callbacks.
|
| -This abstraction is called a
|
| -.Va "buffered event" .
|
| -A buffered event provides input and output buffers that get filled
|
| -and drained automatically.
|
| -The user of a buffered event no longer deals directly with the IO,
|
| -but instead is reading from input and writing to output buffers.
|
| -.Pp
|
| -A new bufferevent is created by
|
| -.Fn bufferevent_new .
|
| -The parameter
|
| -.Fa fd
|
| -specifies the file descriptor from which data is read and written to.
|
| -This file descriptor is not allowed to be a
|
| -.Xr pipe 2 .
|
| -The next three parameters are callbacks.
|
| -The read and write callback have the following form:
|
| -.Ft void
|
| -.Fn "(*cb)" "struct bufferevent *bufev" "void *arg" .
|
| -The error callback has the following form:
|
| -.Ft void
|
| -.Fn "(*cb)" "struct bufferevent *bufev" "short what" "void *arg" .
|
| -The argument is specified by the fourth parameter
|
| -.Fa "cbarg" .
|
| -A
|
| -.Fa bufferevent struct
|
| -pointer is returned on success, NULL on error.
|
| -Both the read and the write callback may be NULL.
|
| -The error callback has to be always provided.
|
| -.Pp
|
| -Once initialized, the bufferevent structure can be used repeatedly with
|
| -bufferevent_enable() and bufferevent_disable().
|
| -The flags parameter can be a combination of
|
| -.Va EV_READ
|
| -and
|
| -.Va EV_WRITE .
|
| -When read enabled the bufferevent will try to read from the file
|
| -descriptor and call the read callback.
|
| -The write callback is executed
|
| -whenever the output buffer is drained below the write low watermark,
|
| -which is
|
| -.Va 0
|
| -by default.
|
| -.Pp
|
| -The
|
| -.Fn bufferevent_write
|
| -function can be used to write data to the file descriptor.
|
| -The data is appended to the output buffer and written to the descriptor
|
| -automatically as it becomes available for writing.
|
| -.Fn bufferevent_write
|
| -returns 0 on success or \-1 on failure.
|
| -The
|
| -.Fn bufferevent_read
|
| -function is used to read data from the input buffer,
|
| -returning the amount of data read.
|
| -.Pp
|
| -If multiple bases are in use, bufferevent_base_set() must be called before
|
| -enabling the bufferevent for the first time.
|
| -.Sh NON-BLOCKING HTTP SUPPORT
|
| -.Nm libevent
|
| -provides a very thin HTTP layer that can be used both to host an HTTP
|
| -server and also to make HTTP requests.
|
| -An HTTP server can be created by calling
|
| -.Fn evhttp_new .
|
| -It can be bound to any port and address with the
|
| -.Fn evhttp_bind_socket
|
| -function.
|
| -When the HTTP server is no longer used, it can be freed via
|
| -.Fn evhttp_free .
|
| -.Pp
|
| -To be notified of HTTP requests, a user needs to register callbacks with the
|
| -HTTP server.
|
| -This can be done by calling
|
| -.Fn evhttp_set_cb .
|
| -The second argument is the URI for which a callback is being registered.
|
| -The corresponding callback will receive an
|
| -.Va struct evhttp_request
|
| -object that contains all information about the request.
|
| -.Pp
|
| -This section does not document all the possible function calls; please
|
| -check
|
| -.Va event.h
|
| -for the public interfaces.
|
| -.Sh ADDITIONAL NOTES
|
| -It is possible to disable support for
|
| -.Va epoll , kqueue , devpoll , poll
|
| -or
|
| -.Va select
|
| -by setting the environment variable
|
| -.Va EVENT_NOEPOLL , EVENT_NOKQUEUE , EVENT_NODEVPOLL , EVENT_NOPOLL
|
| -or
|
| -.Va EVENT_NOSELECT ,
|
| -respectively.
|
| -By setting the environment variable
|
| -.Va EVENT_SHOW_METHOD ,
|
| -.Nm libevent
|
| -displays the kernel notification method that it uses.
|
| -.Sh RETURN VALUES
|
| -Upon successful completion
|
| -.Fn event_add
|
| -and
|
| -.Fn event_del
|
| -return 0.
|
| -Otherwise, \-1 is returned and the global variable errno is
|
| -set to indicate the error.
|
| -.Sh SEE ALSO
|
| -.Xr kqueue 2 ,
|
| -.Xr poll 2 ,
|
| -.Xr select 2 ,
|
| -.Xr evdns 3 ,
|
| -.Xr timeout 9
|
| -.Sh HISTORY
|
| -The
|
| -.Nm event
|
| -API manpage is based on the
|
| -.Xr timeout 9
|
| -manpage by Artur Grabowski.
|
| -The port of
|
| -.Nm libevent
|
| -to Windows is due to Michael A. Davis.
|
| -Support for real-time signals is due to Taral.
|
| -.Sh AUTHORS
|
| -The
|
| -.Nm event
|
| -library was written by Niels Provos.
|
| -.Sh BUGS
|
| -This documentation is neither complete nor authoritative.
|
| -If you are in doubt about the usage of this API then
|
| -check the source code to find out how it works, write
|
| -up the missing piece of documentation and send it to
|
| -me for inclusion in this man page.
|
|
|