--- a/usr/src/lib/libevent/event.3.patch Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/lib/libevent/event.3.patch Tue Jun 18 19:18:02 2013 +0100
@@ -1,1025 +1,969 @@
-*** ../../event.3 Fri Nov 2 12:55:13 2007
---- event.3 Fri Nov 2 11:54:59 2007
-***************
-*** 26,592 ****
- .\" 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_set ,
-! .Nm event_base_dispatch ,
-! .Nm event_base_loop ,
-! .Nm event_base_loopexit ,
-! .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_start ,
-! .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 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_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_start" "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
- 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
-! .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 allows the loop to be terminated after some amount of time
- has passed.
- The parameter indicates the time after which the loop should terminate.
-! .Pp
- It is the responsibility of the caller to provide these functions with
- pre-allocated event structures.
-! .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 .
-! 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 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 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
- 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 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_start .
-! 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 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.
---- 26,478 ----
- .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- .\"
-! .TH EVENT 3 "8 August 2000" "libevent 1.3e" "libevent Manual"
-! .SH NAME
-! event_init, event_dispatch, event_loop, event_loopexit, event_set, event_base_dispatch, event_base_loop, event_base_loopexit, event_base_set, event_base_free, event_add, event_del, event_once, event_base_once, event_pending, event_initialized, event_priority_init, event_priority_set, evtimer_set, evtimer_add, evtimer_del, evtimer_pending, evtimer_initialized, signal_set, signal_add, signal_del, signal_pending, signal_initialized, bufferevent_new, bufferevent_free, bufferevent_write, bufferevent_write_buffer, bufferevent_read, bufferevent_enable, bufferevent_disable, bufferevent_settimeout, bufferevent_base_set, evbuffer_new, evbuffer_free, evbuffer_add, evbuffer_add_buffer, evbuffer_add_printf, evbuffer_add_vprintf, evbuffer_drain, evbuffer_write, evbuffer_read, evbuffer_find, evbuffer_readline
-! .SH LIBRARY
-! The libevent library (libevent, -levent)
-! .br
-! .SH SYNOPSIS
-! \fB#include <sys/time.h>\fP
-! .br
-! \fB#include <event.h>\fP
-! .sp
-! \fBstruct event_base* \fBevent_init\fR\fR(\fBvoid\fP\fR);
-! .br
-! \fBint \fBevent_dispatch\fR\fR(\fBvoid\fP\fR);
-! .br
-! \fBint \fBevent_loop\fR\fR(\fBint \fIflags\fP\fR);
-! .br
-! .BI "int event_loopexit(struct timeval* " tv ");"
-! .br
-! \fBvoid \fBevent_set\fR\fR(\fBstruct event* \fIev\fP\fR, \fBint \fIfd \fP\fR, \fBshort \fIevent\fP\fR, \fBvoid \fI(*fn)(int, short, void *)\fP\fR, \fBvoid* \fIarg\fP\fR);
-! .br
-! \fBint \fBevent_base_dispatch\fR\fR(\fBstruct event_base* \fIbase\fP\fR);
-! .br
-! \fBint \fBevent_base_loop\fR\fR(\fBstruct event_base* \fIbase\fP\fR, \fBint \fIflags\fP\fR);
-! .br
-! \fBint \fBevent_base_loopexit\fR\fR(struct event_base* \fIbase\fP\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! \fBint \fBevent_base_set\fR\fR(struct event_base* \fIbase\fP\fR, \fBstruct event* \fIev\fP\fR);
-! .br
-! \fBvoid \fBevent_base_free\fR\fR(struct event_base* \fIbase\fP\fR);
-! .br
-! \fBint \fBevent_add\fR\fR(struct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! .\fBint \fBevent_del\fR\fR(struct event* \fIev\fP\fR);
-! .br
-! \fBint \fBevent_once\fR\fR(int \fIfd\fP\fR, \fBshort \fIevent\fP\fR, \fBvoid \fI(*fn)(int, short, void*)\fB\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! \fBint \fBevent_base_once\fR\fR(struct event_base* \fIbase\fP\fR, \fBint \fIfd\fB\fR, \fBshort \fIevent\fB\fR, \fBvoid \fI(*fn)(int, short, void*)\fB\fR, \fBvoid* \fIarg\fB\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! \fBint \fBevent_pending\fR\fR(struct event* \fIev\fP\fR, \fBshort \fIevent\fB\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! \fBint \fBevent_initialized\fR\fR(struct event* \fIev\fP\fR);
-! .br
-! \fBint \fBevent_priority_init\fR\fR (int \fInpriorities\fP\fR);
-! .br
-! \fBint \fBevent_priority_set\fR\fR (struct event* \fIev\fP\fR, \fBint \fIpriority\fP\fR);
-! .br
-! \fBvoid \fBevtimer_set\fR\fR (struct event* \fIev\fP\fR, \fBvoid \fI(*fn)(int, short, void*)\fB\fR, \fBvoid* \fIarg\fP\fR);
-! .br
-! \fBvoid \fBevtimer_add\fR\fR (struct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! \fBvoid \fBevtimer_del\fR\fR (struct event* \fIev\fP\fR);
-! .br
-! \fBint \fBevtimer_pending\fR\fR (struct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! \fBint \fBevtimer_initialized\fR\fR(struct event* \fIev\fP\fR);
-! .br
-! \fBvoid \fBsignal_set\fR\fR (struct event* \fIev\fP\fR, \fBint \fIsignal\fP\fR, \fBvoid \fI(*fn)(int, short, void*)\fP\fR, \fBvoid* \fIarg\fP\fR);
-! .br
-! \fBvoid \fBsignal_add\fR\fR (struct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! \fBvoid \fBsignal_del\fR\fR (struct event* \fIev\fP\fR);
-! .br
-! \fBint \fBsignal_pending\fR\fR(struct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
-! .br
-! \fBint \fBsignal_initialized\fR\fR(struct event* \fIev\fP\fR);
-! .br
-! \fBstruct bufferevent* \fB"bufferevent_new\fR\fR(int \fIfd\fP\fR, \fBevbuffercb \fIreadcb\fP\fR, \fBevbuffercb \fIwritecb\fP\fR, \fBeverrorcb \fIerrorcb\fP\fR, \fBvoid* \fIcbarg\fP\fR);
-! .br
-! \fBvoid \fBbufferevent_free\fR\fR(struct bufferevent* \fIbufev\fP\fR);
-! .br
-! \fBint \fBbufferevent_write\fR\fR(struct bufferevent* \fIbufev\fP\fR, \fBvoid* \fIdata\fP\fR, \fBsize_t \fIsize\fP\fR);
-! .br
-! \fBint \fBbufferevent_write_buffer\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBstruct evbuffer* \fIbuf\fP\fR);
-! .br
-! \fBsize_t \fBbufferevent_read\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBvoid* \fIdata\fP\fR, \fBsize_t \fIsize\fP\fR);
-! .br
-! \fBint \fBbufferevent_enable\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBshort \fIevent\fP\fR);
-! .br
-! \fBint \fBbufferevent_disable\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBshort \fIeven\fP\fR);
-! .br
-! \fBvoid \fBbufferevent_settimeout\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBint \fItimeout_read\fP\fR, \fBint \fItimeout_write\fP\fR);
-! .br
-! \fBint \fBbufferevent_base_set\fR\fR(\fBstruct event_base* \fIbase\fP\fR, \fBstruct bufferevent* \fIbufev\fP\fR);
-! .br
-! \fBstruct evbuffer* \fBevbuffer_new (\fBvoid\fP\fR);
-! .br
-! \fBvoid \fBvbuffer_free\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR);
-! .br
-! \fBint \fBevbuffer_add\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBconst void* \fIdata\fP\fR, \fBsize_t \fIsize\fP\fR);
-! .br
-! \fBint \fBevbuffer_add_buffer\fR\fR(\fBstruct evbuffer* \fIdst\fP\fR, \fBstruct evbuffer* \fIsrc\fP\fR);
-! .br
-! \fBint \fBevbuffer_add_printf\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBconst char* \fIfmt\fP\fR, \fB...\fP\fR);
-! .br
-! \fBint \fBevbuffer_add_vprintf\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBconst char* \fIfmt\fP\fR, \fBva_list \fIap\fP\fR);
-! .br
-! \fBvoid \fBevbuffer_drain\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBsize_t \fIsize\fP\fR);
-! .br
-! \fBint \fBevbuffer_write\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBint \fIfd\fP\fR);
-! .br
-! \fBint \fBevbuffer_read\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBint \fIfd\fP\fR, \fBint \fIsize\fP\fR);
-! .br
-! \fBu_char* \fBevbuffer_find\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBconst u_char* \fIdata\fP\fR, \fBsize_t \fIsize\fP\fR);
-! .br
-! \fBchar* \fBevbuffer_readline\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR);
-! .br
-! \fBint \fI(*event_sigcb)\fP\fR\fI(void)\fP\fR;
-! .br
-! \fBvolatile sig_atomic_t \fR\fRevent_gotsig\fP\fR;
-! .br
-! .SH DESCRIPTION
- The
-! \fIevent\fP\fR
- 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
-! \fIevent\fP\fR
- API needs to be initialized with
-! \fBevent_init\fR
- before it can be used.
-! .PP
- In order to process events, an application needs to call
-! \fIevent_dispatch\fP\fR .
- This function only returns on error, and should replace the event core
- of the application program.
-! .PP
- In order to avoid races in signal handlers, the
-! \fIevent\fP\fR
- API provides two variables:
-! \fIevent_sigcb\fP\fR
- and
-! \fIevent_gotsig\fP\fR.
- A signal handler
- sets
-! \fIevent_gotsig\fP\fR
- to indicate that a signal has been received.
- The application sets
-! \fIevent_sigcb\fP\fR
- to a callback function.
- After the signal handler sets
-! \fIevent_gotsig\fP\fR,
-! \fBevent_dispatch()\fP\fR
- 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
-! \fIevent\fP\fR
- library, causing
-! \fBevent_dispatch\fP\fR
- to terminate with
-! \fIerrno\fP\fR
-! set to EINTR.
-! .PO
- The
-! \fIevent_loop\fP\fR
- function provides an interface for single pass execution of pending
- events.
- The flags
-! EVLOOP_ONCE and EVLOOP_NONBLOCK are recognized.
- The
-! \fIevent_loopexit\fP\fR
- function allows the loop to be terminated after some amount of time
- has passed.
- The parameter indicates the time after which the loop should terminate.
-! .PP
- It is the responsibility of the caller to provide these functions with
- pre-allocated event structures.
-! .PP
- The function
-! \fBevent_set\fP\fR
- prepares the event structure
-! \fIev\fP\fR
- to be used in future calls to
-! \fBevent_add\fP\fR
- and
-! \fBevent_del\fP\fR .
- The event will be prepared to call the function specified by the
-! \fIfn\fP\fR
- argument with an
-! \fIint\fP\fR
- argument indicating the file descriptor, a
-! \fIshort\fP\fR
- argument indicating the type of event, and a
-! \fIvoid*\fP\fR
- argument given in the
-! \fIarg\fP\fR
- argument.
-! The \fIfd\fP\fR
- indicates the file descriptor that should be monitored for events.
-! The events can be either EV_READ, EV_WRITE , or both,
- indicating that an application can read or write from the file descriptor
- respectively without blocking.
-! .PP
- The function
-! \fIfn\fP\fR
- will be called with the file descriptor that triggered the event and
-! the type of event which will be either EV_TIMEOUT, EV_SIGNAL,
-! EV_READ, or EV_WRITE. The additional flag EV_PERSIST makes an
-! \fIevent_add\fP\fR persistent until
-! \fIevent_del\fP\fR
- has been called.
-! .PP
- Once initialized, the
-! \fIev\fP\fR
- structure can be used repeatedly with
-! \fIevent_add\fP\fR
- and
-! \fIevent_del\fP\fR
- and does not need to be reinitialized unless the function called and/or
- the argument to it are to be changed.
- However, when an
-! \fIev\fP\fR
- structure has been added to libevent using
-! \fIevent_add\fP\fR
- the structure must persist until the event occurs (assuming
-! EV_PERSIST is not set) or is removed using
-! \fIevent_del\fP\fR .
- You may not reuse the same
-! \fIev\fP\fR
- structure for multiple monitored descriptors; each descriptor
-! needs its own \fIev\fP\fR .
-! .PP
- The function
-! \fIevent_add\fP\fR
- schedules the execution of the
-! \fIev\fP\fR
- event when the event specified in
-! \fBevent_set\fP\fR
- occurs or in at least the time specified in the
-! \fItv\fP\fR .
- If
-! \fItv\fP\fR
-! is NULL, no timeout occurs and the function will only be called
- if a matching event occurs on the file descriptor.
- The event in the
-! \fIev\fP\fR
- argument must be already initialized by
-! \fIevent_set\fP\fR
- and may not be used in calls to
-! \fIevent_set\fP\fR
- until it has timed out or been removed with
-! \fIevent_del\fP\fR .
- If the event in the
-! \fIev\fP\fR
- argument already has a scheduled timeout, the old timeout will be
- replaced by the new one.
-! .PP
- The function
-! \fIevent_del\fP\fR
- will cancel the event in the argument
-! \fIev\fP\fR .
- If the event has already executed or has never been added
- the call will have no effect.
-! .PP
- The function
-! \fIevent_once\fP\fR
- is similar to
-! \fIevent_set\fP\fR.
- However, it schedules a callback to be called exactly once and does not
- require the caller to prepare an
-! \fIevent\fP\fR
- structure.
-! This function supports EV_TIMEOUT, EV_READ, and EV_WRITE.
-! .PP
- The
-! \fIevent_pending\fP\fR
- function can be used to check if the event specified by
-! \fIevent\fP\fR
- is pending to run.
-! If EV_TIMEOUT was specified and
-! \fItv\fP\fR
-! is not NULL ,
- the expiration time of the event will be returned in
-! \fItv\fP\fR .
-! .PP
- The
-! \fIevent_initialized\fP\fR
- macro can be used to check if an event has been initialized.
-! .PP
- The functions
-! \fIevtimer_set()\fP\fR,
-! \fIevtimer_add()\fP\fR,
-! \fIevtimer_del()\fP\fR,
-! \fIevtimer_initialized()\fP\fR,
- and
-! \fIevtimer_pending()\fP\fR
- are abbreviations for common situations where only a timeout is required.
- The file descriptor passed will be \-1, and the event type will be
-! EV_TIMEOUT .
-! .PP
- The functions
-! \fIsignal_set()\fP\fR,
-! \fIsignal_add()\fP]\fR,
-! \fIsignal_del()\fP\fR ,
-! \fIsignal_initialized()\fP\fR,
- and
-! \fIsignal_pending()\fP\fR
- are abbreviations.
-! The event type will be a persistent EV_SIGNAL .
- That means
-! \fIsignal_set\fP\fR adds EV_PERSIST .
-! .PP
- It is possible to disable support for
-! epoll, kqueue, devpoll, event ports, poll or select
- by setting the environment variable
-! EVENT_NOEPOLL, EVENT_NOKQUEUE, EVENT_NODEVPOLL, EVENT_NOEVPORT,
-! EVENT_NOPOLL or EVENT_NOSELECT, respectively.
- By setting the environment variable
-! EVENT_SHOW_METHOD,
-! \fIlibevent\fP\fR
- displays the kernel notification method that it uses.
-! .SH EVENT PRIORITIES
- By default
-! \fIlibevent\fP\fR
- 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,
-! \fIlibevent\fP\fR
- 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
-! \fIevent_priority_init()\fP\fR
- function.
- This function should be called before the first call to
-! \fIevent_dispatch()\fP\fR .
- The
-! \fIevent_priority_set()\fP\fR
- function can be used to assign a priority to an event.
- By default,
-! \fIlibevent\fP\fR
- assigns the middle priority to all events unless their priority
- is explicitly set.
-! .SH THREAD SAFE EVENTS
-! \fIlibevent\fP\fR
- has experimental support for thread-safe events.
- When initializing the library via
-! \fIevent_init()\fP\fR,
- an event base is returned.
- This event base can be used in conjunction with calls to
-! \fIevent_base_set()\fP\fR,
-! \fIevent_base_dispatch()\fP\fR,
-! \fIevent_base_loop()\fP\fR,
-! \fIevent_base_loopexit()\fP\fR,
-! \fIbufferevent_base_set()\fP\fR
- and
-! \fIevent_base_free()\fP\fR.
-! \fIevent_base_set()\fP\fR
- should be called after preparing an event with
-! \fIevent_set()\fP\fR,
- as
-! \fIevent_set()\fP\fR
- assigns the provided event to the most recently created event base.
-! \fIbufferevent_base_set()\fP\fR
- should be called after preparing a bufferevent with
-! \fIbufferevent_new()\fP\fR.
-! \fIevent_base_free()\fP\fR
- should be used to free memory associated with the event base
- when it is no longer needed.
-! .SH BUFFERED EVENTS
-! \fIlibevent\fP\fR
- provides an abstraction on top of the regular event callbacks.
- This abstraction is called a
-! \fB"buffered event"\fP\fR.
- 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
-! \fIbufferevent_new()\fP\fR.
- The parameter
-! \fIfd\fP\fR
- specifies the file descriptor from which data is read and written to.
- This file descriptor is not allowed to be a
-! \fBpipe(2)\fR.
- The next three parameters are callbacks.
- The read and write callback have the following form:
-! \fBvoid \fB(*cb)\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBvoid* \fIarg\fP\fR).
- The error callback has the following form:
-! \fBvoid \fB(*cb)\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBshort \fIwhat\fP\fR, \fBvoid* \fIarg\fP\fR).
- The argument is specified by the fourth parameter
-! \fIcbarg\fP\fR.
- A
-! \fIbufferevent\fP\fR 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
-! \fIbufferevent_enable()\fP\fR and \fIbufferevent_disable()\fP\fR.
-! The \fIflags\fP\fR parameter can be a combination of
-! EV_READ and 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 0 by default.
-! .PP
- The
-! \fIbufferevent_write()\fP\fR
- 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.
-! \fIbufferevent_write()\fP\fR
- returns 0 on success or \-1 on failure.
- The
-! \fIbufferevent_read()\fP\fR
- 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 RETURN VALUES
- Upon successful completion
-! \fIevent_add()\fP\fR
- and
-! \fIevent_del()\fP\fR
- return 0.
- Otherwise, \-1 is returned and the global variable errno is
- set to indicate the error.
-! .SH SEE ALSO
-! \fBpoll(2)\fR,
-! \fBselect(3C)\fR,
-! \fBport_create(3C)\fR,
-! \fBtimeout(9f)\fR.
-! .SH HISTORY
- The
-! \fIlibevent\fR
- API manpage is based on the
-! \fBtimeout(9)\fR
- manpage by Artur Grabowski.
- The port of
-! \fBlibevent\fP\fR
- to Windows is due to Michael A. Davis.
- Support for real-time signals is due to Taral.
-! .SH AUTHORS
- The
-! \fIevent\fP\fR
- 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.
-+
+--- libevent-1.4.14b-stable/event.3 po lis 21 06:43:10 2011
++++ libevent-1.4.14b-stable/event.3 po lis 21 09:31:12 2011
+@@ -26,527 +26,528 @@
+ .\" 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
++.TH EVENT 3 "21 November 2011" "libevent 1.4.14b" "libevent Manual"
++.SH NAME
++event_init,
++event_dispatch,
++event_loop,
++event_loopexit,
++event_loopbreak,
++event_set,
++event_base_dispatch,
++event_base_loop,
++event_base_loopexit,
++event_base_loopbreak,
++event_base_set,
++event_base_free,
++event_add,
++event_del,
++event_once,
++event_base_once,
++event_pending,
++event_initialized,
++event_priority_init,
++event_priority_set,
++evtimer_set,
++evtimer_add,
++evtimer_del,
++evtimer_pending,
++evtimer_initialized,
++signal_set,
++signal_add,
++signal_del,
++signal_pending,
++signal_initialized,
++bufferevent_new,
++bufferevent_free,
++bufferevent_write,
++bufferevent_write_buffer,
++bufferevent_read,
++bufferevent_enable,
++bufferevent_disable,
++bufferevent_settimeout,
++bufferevent_base_set,
++evbuffer_new,
++evbuffer_free,
++evbuffer_add,
++evbuffer_add_buffer,
++evbuffer_add_printf,
++evbuffer_add_vprintf,
++evbuffer_drain,
++evbuffer_write,
++evbuffer_read,
++evbuffer_find,
++evbuffer_readline,
++evhttp_new,
++evhttp_bind_socket,
++evhttp_free
++\- execute a function when a specific event occurs
++.SH LIBRARY
++The libevent library (libevent, -levent)
++.br
++.SH SYNOPSIS
++.LP
++.nf
++\fB#include <sys/time.h>\fP
++\fB#include <event.h>\fP
++
++\fBstruct event_base* \fBevent_init\fR\fR(\fBvoid\fP\fR);
++
++\fBint \fBevent_dispatch\fR\fR(\fBvoid\fP\fR);
++
++\fBint \fBevent_loop\fR\fR(\fBint \fIflags\fP\fR);
++
++\fBint \fBevent_loopexit\fR\fR(\fBstruct timeval* \fItv\fP\fR);
++
++\fBint \fBevent_loopbreak\fR\fR(\fBvoid\fP\fR);
++
++\fBvoid \fBevent_set\fR\fR(\fBstruct event* \fIev\fP\fR, \fBint \fIfd \fP\fR, \fBshort \fIevent\fP\fR, \fBvoid \fI(*fn)(\fBint, short, void *\fP\fR), \fBvoid* \fIarg\fP\fR);
++
++\fBint \fBevent_base_dispatch\fR\fR(\fBstruct event_base* \fIbase\fP\fR);
++
++\fBint \fBevent_base_loop\fR\fR(\fBstruct event_base* \fIbase\fP\fR, \fBint \fIflags\fP\fR);
++
++\fBint \fBevent_base_loopexit\fR\fR(\fBstruct event_base* \fIbase\fP\fR, \fBstruct timeval* \fItv\fP\fR);
++
++\fBint \fBevent_base_loopbreak\fR\fR(\fBstruct event_base* \fIbase\fP\fR);
++
++\fBint \fBevent_base_set\fR\fR(\fBstruct event_base* \fIbase\fP\fR, \fBstruct event* \fIev\fP\fR);
++
++\fBvoid \fBevent_base_free\fR\fR(\fBstruct event_base* \fIbase\fP\fR);
++
++\fBint \fBevent_add\fR\fR(\fBstruct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
++
++.\fBint \fBevent_del\fR\fR(struct event* \fIev\fP\fR);
++
++\fBint \fBevent_once\fR\fR(\fBint \fIfd\fP\fR, \fBshort \fIevent\fP\fR, \fBvoid \fI(*fn)(\fBint, short, void*\fB\fR), \fBstruct timeval* \fItv\fP\fR);
++
++\fBint \fBevent_base_once\fR\fR(\fBstruct event_base* \fIbase\fP\fR, \fBint \fIfd\fB\fR, \fBshort \fIevent\fB\fR, \fBvoid \fI(*fn)(\fBint, short, void*\fB\fR), \fBvoid* \fIarg\fB\fR, \fBstruct timeval* \fItv\fP\fR);
++
++\fBint \fBevent_pending\fR\fR(\fBstruct event* \fIev\fP\fR, \fBshort \fIevent\fB\fR, \fBstruct timeval* \fItv\fP\fR);
++
++\fBint \fBevent_initialized\fR\fR(\fBstruct event* \fIev\fP\fR);
++
++\fBint \fBevent_priority_init\fR\fR (\fBint \fInpriorities\fP\fR);
++
++\fBint \fBevent_priority_set\fR\fR (\fBstruct event* \fIev\fP\fR, \fBint \fIpriority\fP\fR);
++
++\fBvoid \fBevtimer_set\fR\fR (\fBstruct event* \fIev\fP\fR, \fBvoid \fI(*fn)(\fBint, short, void*\fB\fR), \fBvoid* \fIarg\fP\fR);
++
++\fBvoid \fBevtimer_add\fR\fR (\fBstruct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
++
++\fBvoid \fBevtimer_del\fR\fR (\fBstruct event* \fIev\fP\fR);
++
++\fBint \fBevtimer_pending\fR\fR (\fBstruct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
++
++\fBint \fBevtimer_initialized\fR\fR(\fBstruct event* \fIev\fP\fR);
++
++\fBvoid \fBsignal_set\fR\fR (\fBstruct event* \fIev\fP\fR, \fBint \fIsignal\fP\fR, \fBvoid \fI(*fn)(\fBint, short, void*\fP\fR), \fBvoid* \fIarg\fP\fR);
++
++\fBvoid \fBsignal_add\fR\fR (\fBstruct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
++
++\fBvoid \fBsignal_del\fR\fR (\fBstruct event* \fIev\fP\fR);
++
++\fBint \fBsignal_pending\fR\fR(\fBstruct event* \fIev\fP\fR, \fBstruct timeval* \fItv\fP\fR);
++
++\fBint \fBsignal_initialized\fR\fR(\fBstruct event* \fIev\fP\fR);
++
++\fBstruct bufferevent* \fBbufferevent_new\fR\fR(\fBint \fIfd\fP\fR, \fBevbuffercb \fIreadcb\fP\fR, \fBevbuffercb \fIwritecb\fP\fR, \fBeverrorcb \fIerrorcb\fP\fR, \fBvoid* \fIcbarg\fP\fR);
++
++\fBvoid \fBbufferevent_free\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR);
++
++\fBint \fBbufferevent_write\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBvoid* \fIdata\fP\fR, \fBsize_t \fIsize\fP\fR);
++
++\fBint \fBbufferevent_write_buffer\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBstruct evbuffer* \fIbuf\fP\fR);
++
++\fBsize_t \fBbufferevent_read\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBvoid* \fIdata\fP\fR, \fBsize_t \fIsize\fP\fR);
++
++\fBint \fBbufferevent_enable\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBshort \fIevent\fP\fR);
++
++\fBint \fBbufferevent_disable\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBshort \fIeven\fP\fR);
++
++\fBvoid \fBbufferevent_settimeout\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBint \fItimeout_read\fP\fR, \fBint \fItimeout_write\fP\fR);
++
++\fBint \fBbufferevent_base_set\fR\fR(\fBstruct event_base* \fIbase\fP\fR, \fBstruct bufferevent* \fIbufev\fP\fR);
++
++\fBstruct evbuffer* \fBevbuffer_new (\fBvoid\fP\fR);
++
++\fBvoid \fBevbuffer_free\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR);
++
++\fBint \fBevbuffer_add\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBconst void* \fIdata\fP\fR, \fBsize_t \fIsize\fP\fR);
++
++\fBint \fBevbuffer_add_buffer\fR\fR(\fBstruct evbuffer* \fIdst\fP\fR, \fBstruct evbuffer* \fIsrc\fP\fR);
++
++\fBint \fBevbuffer_add_printf\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBconst char* \fIfmt\fP\fR, \fB...\fP\fR);
++
++\fBint \fBevbuffer_add_vprintf\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBconst char* \fIfmt\fP\fR, \fBva_list \fIap\fP\fR);
++
++\fBvoid \fBevbuffer_drain\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBsize_t \fIsize\fP\fR);
++
++\fBint \fBevbuffer_write\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBint \fIfd\fP\fR);
++
++\fBint \fBevbuffer_read\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBint \fIfd\fP\fR, \fBint \fIsize\fP\fR);
++
++\fBu_char* \fBevbuffer_find\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR, \fBconst u_char* \fIdata\fP\fR, \fBsize_t \fIsize\fP\fR);
++
++\fBchar* \fBevbuffer_readline\fR\fR(\fBstruct evbuffer* \fIbuf\fP\fR);
++
++\fBstruct evhttp * \fBevhttp_new\fR\fR(\fBstruct event_base* \fIbase\fP\fR);
++
++\fBint \fBevhttp_bind_socket\fR\fR(\fBstruct evhttp* \fIhttp\fP\fR, \fBconst char* \fIaddress\fP\fR, \fBu_short \fIport\fP\fR);
++
++\fBvoid \fBevhttp_free\fR\fR(\fBstruct evhttp* \fIhttp\fP\fR);
++
++\fBint \fI(*event_sigcb)\fP\fR\fI(\fBvoid\fP\fR);
++
++\fBvolatile sig_atomic_t \fR\fRevent_gotsig\fP\fR;
++.fi
++
++.SH DESCRIPTION
+ The
+-.Nm event
++\fIevent\fP\fR
+ 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
++.PP
+ The
+-.Nm event
++\fIevent\fP\fR
+ API needs to be initialized with
+-.Fn event_init
++\fBevent_init\fR
+ before it can be used.
+-.Pp
++.PP
+ In order to process events, an application needs to call
+-.Fn event_dispatch .
++\fBevent_dispatch\fP\fR.
+ This function only returns on error, and should replace the event core
+ of the application program.
+-.Pp
++.PP
+ The function
+-.Fn event_set
++\fBevent_set\fP\fR
+ prepares the event structure
+-.Fa ev
++\fIev\fP\fR
+ to be used in future calls to
+-.Fn event_add
++\fBevent_add\fP\fR
+ and
+-.Fn event_del .
++\fBevent_del\fP\fR .
+ The event will be prepared to call the function specified by the
+-.Fa fn
++\fIfn\fP\fR
+ argument with an
+-.Fa int
++\fIint\fP\fR
+ argument indicating the file descriptor, a
+-.Fa short
++\fIshort\fP\fR
+ argument indicating the type of event, and a
+-.Fa void *
++\fIvoid*\fP\fR
+ argument given in the
+-.Fa arg
++\fIarg\fP\fR
+ argument.
+ The
+-.Fa fd
++The \fIfd\fP\fR
+ indicates the file descriptor that should be monitored for events.
+-The events can be either
+-.Va EV_READ ,
+-.Va EV_WRITE ,
+-or both,
++The events can be either EV_READ, EV_WRITE , or both,
+ indicating that an application can read or write from the file descriptor
+ respectively without blocking.
+-.Pp
++.PP
+ The function
+-.Fa fn
++\fIfn\fP\fR
+ 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 ,
++EV_TIMEOUT,
++EV_SIGNAL,
++EV_READ,
+ or
+-.Va EV_WRITE .
++EV_WRITE.
+ Additionally, an event which has registered interest in more than one of the
+ preceeding events, via bitwise-OR to
+-.Fn event_set ,
++\fBevent_set\fP\fR,
+ can provide its callback function with a bitwise-OR of more than one triggered
+ event.
+ The additional flag
+-.Va EV_PERSIST
++EV_PERSIST
+ makes an
+-.Fn event_add
++\fBevent_add\fP\fR
+ persistent until
+-.Fn event_del
++\fBevent_del\fP\fR
+ has been called.
+-.Pp
++.PP
+ Once initialized, the
+-.Fa ev
++\fIev\fP\fR
+ structure can be used repeatedly with
+-.Fn event_add
++\fBevent_add\fP\fR
+ and
+-.Fn event_del
++\fBevent_del\fP\fR
+ 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
++\fIev\fP\fR
+ structure has been added to libevent using
+-.Fn event_add
++\fBevent_add\fP\fR
+ the structure must persist until the event occurs (assuming
+-.Fa EV_PERSIST
++EV_PERSIST
+ is not set) or is removed
+ using
+-.Fn event_del .
++\fBevent_del\fP\fR.
+ You may not reuse the same
+-.Fa ev
++\fIev\fP\fR
+ structure for multiple monitored descriptors; each descriptor
+ needs its own
+-.Fa ev .
+-.Pp
++\fIev\fP\fR.
++.PP
+ The function
+-.Fn event_add
++\fBevent_add\fP\fR
+ schedules the execution of the
+-.Fa ev
++\fIev\fP\fR
+ event when the event specified in
+-.Fn event_set
++\fBevent_set\fP\fR
+ occurs or in at least the time specified in the
+-.Fa tv .
++\fItv\fP\fR
+ If
+-.Fa tv
++\fItv\fP\fR
+ is
+-.Dv NULL ,
++\fINULL\fP\fR,
+ 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
++\fIev\fP\fR
+ argument must be already initialized by
+-.Fn event_set
++\fBevent_set\fP\fR
+ and may not be used in calls to
+-.Fn event_set
++\fBevent_set\fP\fR
+ until it has timed out or been removed with
+-.Fn event_del .
++\fBevent_del\fP\fR.
+ If the event in the
+-.Fa ev
++\fIev\fP\fR
+ argument already has a scheduled timeout, the old timeout will be
+ replaced by the new one.
+-.Pp
++.PP
+ The function
+-.Fn event_del
++\fBevent_del\fP\fR
+ will cancel the event in the argument
+-.Fa ev .
++\fIev\fP\fR.
+ If the event has already executed or has never been added
+ the call will have no effect.
+-.Pp
++.PP
+ The functions
+-.Fn evtimer_set ,
+-.Fn evtimer_add ,
+-.Fn evtimer_del ,
+-.Fn evtimer_initialized ,
++\fBevtimer_set\fP\fR,
++\fBevtimer_add\fP\fR,
++\fBevtimer_del\fP\fR,
++\fBevtimer_initialized\fP\fR,
+ and
+-.Fn evtimer_pending
++\fBevtimer_pending\fP\fR
+ 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
++EV_TIMEOUT.
++.PP
+ The functions
+-.Fn signal_set ,
+-.Fn signal_add ,
+-.Fn signal_del ,
+-.Fn signal_initialized ,
++\fBsignal_set\fP\fR,
++\fBsignal_add\fP\fR,
++\fBsignal_del\fP\fR,
++\fBsignal_initialized\fP\fR,
+ and
+-.Fn signal_pending
++\fBsignal_pending\fP\fR
+ are abbreviations.
+ The event type will be a persistent
+-.Va EV_SIGNAL .
++EV_SIGNAL .
+ That means
+-.Fn signal_set
++\fBsignal_set\fP\fR
+ adds
+-.Va EV_PERSIST .
+-.Pp
++EV_PERSIST.
++.PP
+ In order to avoid races in signal handlers, the
+-.Nm event
++\fIevent\fP\fR
+ API provides two variables:
+-.Va event_sigcb
++\fBevent_sigcb\fP\fR
+ and
+-.Va event_gotsig .
++\fBevent_gotsig\fP\fR.
+ A signal handler
+ sets
+-.Va event_gotsig
++\fBevent_gotsig\fP\fR
+ to indicate that a signal has been received.
+ The application sets
+-.Va event_sigcb
++\fBevent_sigcb\fP\fR
+ to a callback function.
+ After the signal handler sets
+-.Va event_gotsig ,
+-.Nm event_dispatch
++\fBevent_gotsig\fP\fR,
++\fBevent_dispatch()\fP\fR
+ 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
++\fIevent\fP\fR
+ library, causing
+-.Fn event_dispatch
++\fBevent_dispatch\fP\fR
+ to terminate with
+-.Va errno
++\fBerrno\fP\fR
+ set to
+-.Er EINTR .
+-.Pp
++\fBEINTR\fP\fR.
++.PP
+ The function
+-.Fn event_once
++\fBevent_once\fP\fR
+ is similar to
+-.Fn event_set .
++\fBevent_set\fP\fR.
+ However, it schedules a callback to be called exactly once and does not
+ require the caller to prepare an
+-.Fa event
++\fIevent\fP\fR
+ structure.
+ This function supports
+-.Fa EV_TIMEOUT ,
+-.Fa EV_READ ,
++EV_TIMEOUT,
++EV_READ,
+ and
+-.Fa EV_WRITE .
+-.Pp
++EV_WRITE.
++.PP
+ The
+ .Fn event_pending
++\fBevent_pending\fP\fR
+ function can be used to check if the event specified by
+-.Fa event
++\fIevent\fP\fR
+ is pending to run.
+ If
+-.Va EV_TIMEOUT
++EV_TIMEOUT
+ was specified and
+-.Fa tv
++\fItv\fP\fR
+ is not
+-.Dv NULL ,
++\fINULL\fP\fR,
+ the expiration time of the event will be returned in
+-.Fa tv .
+-.Pp
++\fItv\fP\fR.
++.PP
+ The
+-.Fn event_initialized
++\fBevent_initialized\fP\fR
+ macro can be used to check if an event has been initialized.
+-.Pp
++.PP
+ The
+-.Nm event_loop
++\fBevent_loop\fP\fR
+ function provides an interface for single pass execution of pending
+ events.
+ The flags
+-.Va EVLOOP_ONCE
++EVLOOP_ONCE
+ and
+-.Va EVLOOP_NONBLOCK
++EVLOOP_NONBLOCK
+ are recognized.
+ The
+-.Nm event_loopexit
++\fBevent_loopexit\fP\fR
+ function exits from the event loop. The next
+-.Fn event_loop
++\fBevent_loop\fP\fR
+ 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
++\fBevent_loop\fP\fR
+ will proceed normally.
+ The
+-.Nm event_loopbreak
++\fBevent_loopbreak\fP\fR
+ function exits from the event loop immediately.
+-.Fn event_loop
++\fBevent_loop\fP\fR
+ will abort after the next event is completed;
+-.Fn event_loopbreak
++\fBevent_loopbreak\fP\fR
+ is typically invoked from this event's callback. This behavior is analogous
+ to the "break;" statement. Subsequent invocations of
+-.Fn event_loop
++\fBevent_loop\fP\fR
+ will proceed normally.
+-.Pp
++.PP
+ It is the responsibility of the caller to provide these functions with
+ pre-allocated event structures.
+-.Pp
+-.Sh EVENT PRIORITIES
++.PP
++.SH EVENT PRIORITIES
+ By default
+-.Nm libevent
++\fIlibevent\fP\fR
+ 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
++\fIlibevent\fP\fR
+ supports strict priority queues.
+ Active events with a lower priority are always processed before events
+ with a higher priority.
+-.Pp
++.PP
+ The number of different priorities can be set initially with the
+-.Fn event_priority_init
++\fBevent_priority_init\fP\fR
+ function.
+ This function should be called before the first call to
+-.Fn event_dispatch .
++\fBevent_dispatch\fP\fR.
+ The
+-.Fn event_priority_set
++\fBevent_priority_set\fP\fR
+ function can be used to assign a priority to an event.
+ By default,
+-.Nm libevent
++\fIlibevent\fP\fR
+ assigns the middle priority to all events unless their priority
+ is explicitly set.
+-.Sh THREAD SAFE EVENTS
+-.Nm Libevent
++.SH THREAD SAFE EVENTS
++\fIlibevent\fP\fR
+ 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
++\fBevent_base_set()\fP\fR,
++\fBevent_base_dispatch()\fP\fR,
++\fBevent_base_loop()\fP\fR,
++\fBevent_base_loopexit()\fP\fR,
++\fBbufferevent_base_set()\fP\fR
+ and
+-.Fn event_base_free .
+-.Fn event_base_set
++\fBevent_base_free()\fP\fR.
++\fBevent_base_set()\fP\fR
+ should be called after preparing an event with
+-.Fn event_set ,
++\fBevent_set()\fP\fR,
+ as
+-.Fn event_set
++\fBevent_set()\fP\fR,
+ assigns the provided event to the most recently created event base.
+-.Fn bufferevent_base_set
++\fBbufferevent_base_set()\fP\fR
+ should be called after preparing a bufferevent with
+-.Fn bufferevent_new .
+-.Fn event_base_free
++\fBbufferevent_new()\fP\fR.
++\fBevent_base_free()\fP\fR
+ should be used to free memory associated with the event base
+ when it is no longer needed.
+-.Sh BUFFERED EVENTS
+-.Nm libevent
++.SH BUFFERED EVENTS
++\fIlibevent\fP\fR
+ provides an abstraction on top of the regular event callbacks.
+ This abstraction is called a
+-.Va "buffered event" .
++\fB"buffered event"\fP\fR.
+ 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
++.PP
+ A new bufferevent is created by
+-.Fn bufferevent_new .
++\fBbufferevent_new()\fP\fR.
+ The parameter
+-.Fa fd
++\fIfd\fP\fR
+ specifies the file descriptor from which data is read and written to.
+ This file descriptor is not allowed to be a
+-.Xr pipe 2 .
++\fBpipe(2)\fR.
+ The next three parameters are callbacks.
+ The read and write callback have the following form:
+-.Ft void
+-.Fn "(*cb)" "struct bufferevent *bufev" "void *arg" .
++\fBvoid \fB(*cb)\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBvoid* \fIarg\fP\fR).
+ The error callback has the following form:
+-.Ft void
+-.Fn "(*cb)" "struct bufferevent *bufev" "short what" "void *arg" .
++\fBvoid \fB(*cb)\fR\fR(\fBstruct bufferevent* \fIbufev\fP\fR, \fBshort \fIwhat\fP\fR, \fBvoid* \fIarg\fP\fR).
+ The argument is specified by the fourth parameter
+-.Fa "cbarg" .
++\fBcbarg\fP\fR.
+ A
+-.Fa bufferevent struct
+-pointer is returned on success, NULL on error.
+-Both the read and the write callback may be NULL.
++\fBstruct bufferevent\fP\fR
++pointer is returned on success, \fINULL\fP\fR on error.
++Both the read and the write callback may be \fINULL\fP\fR.
+ The error callback has to be always provided.
+-.Pp
++.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
++EV_READ
+ and
+-.Va EV_WRITE .
++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
++\fI0\fP\fR
+ by default.
+-.Pp
++.PP
+ The
+-.Fn bufferevent_write
++\fBbufferevent_write()\fP\fR
+ 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
++\fBbufferevent_write()\fP\fR
+ returns 0 on success or \-1 on failure.
+ The
+-.Fn bufferevent_read
++\fBbufferevent_read()\fP\fR
+ function is used to read data from the input buffer,
+ returning the amount of data read.
+-.Pp
++.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
+@@ -549,74 +550,74 @@
+ .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
++.SH NON-BLOCKING HTTP SUPPORT
++\fIlibevent\fP\fR
+ 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 .
++\fBevhttp_new\fP\fR.
+ It can be bound to any port and address with the
+-.Fn evhttp_bind_socket
++\fBevhttp_bind_socket\fP\fR
+ function.
+ When the HTTP server is no longer used, it can be freed via
+-.Fn evhttp_free .
+-.Pp
++\fBevhttp_free\fP\fR.
++.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 .
++\fBevhttp_set_cb\fP\fR.
+ The second argument is the URI for which a callback is being registered.
+ The corresponding callback will receive an
+-.Va struct evhttp_request
++\fIstruct evhttp_request\fP\fR
+ object that contains all information about the request.
+-.Pp
++.PP
+ This section does not document all the possible function calls; please
+ check
+-.Va event.h
++\fBevent.h\fP\fR
+ for the public interfaces.
+-.Sh ADDITIONAL NOTES
++.SH ADDITIONAL NOTES
+ It is possible to disable support for
+-.Va epoll , kqueue , devpoll , poll
++\fBepoll , kqueue , devpoll , poll\fP\fR
+ or
+-.Va select
++\fBselect\fP\fR
+ by setting the environment variable
+-.Va EVENT_NOEPOLL , EVENT_NOKQUEUE , EVENT_NODEVPOLL , EVENT_NOPOLL
++EVENT_NOEPOLL, EVENT_NOKQUEUE, EVENT_NODEVPOLL, EVENT_NOPOLL
+ or
+-.Va EVENT_NOSELECT ,
++EVENT_NOSELECT,
+ respectively.
+ By setting the environment variable
+-.Va EVENT_SHOW_METHOD ,
+-.Nm libevent
++EVENT_SHOW_METHOD,
++\fIlibevent\fP\fR
+ displays the kernel notification method that it uses.
+-.Sh RETURN VALUES
++.SH RETURN VALUES
+ Upon successful completion
+-.Fn event_add
++\fBevent_add\fP\fR
+ and
+-.Fn event_del
++\fBevent_del\fP\fR
+ 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
++.SH SEE ALSO
++\fBpoll(2)\fR,
++\fBselect(3C)\fR,
++\fBport_create(3C)\fR,
++\fBevdns(3)\fR,
++\fBtimeout(9f)\fR.
++.SH HISTORY
+ The
+-.Nm event
++\fIevent\fP\fR
+ API manpage is based on the
+-.Xr timeout 9
++\fBtimeout(9)\fR
+ manpage by Artur Grabowski.
+ The port of
+-.Nm libevent
++\fBlibevent\fP\fR
+ to Windows is due to Michael A. Davis.
+ Support for real-time signals is due to Taral.
+-.Sh AUTHORS
++.SH AUTHORS
+ The
+-.Nm event
++\fIevent\fP\fR
+ library was written by Niels Provos.
+-.Sh BUGS
++.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