Bump libevent to 1.4.14b-stable oi_151a
authorJon Tibble <meths@btinternet.com>
Tue, 18 Jun 2013 19:18:02 +0100
branchoi_151a
changeset 229 42e9bb6c7067
parent 228 dc60997879d6
child 230 bae902ae0338
Bump libevent to 1.4.14b-stable
usr/src/lib/libevent/METADATA
usr/src/lib/libevent/Makefile.in.patch
usr/src/lib/libevent/Makefile.sfw
usr/src/lib/libevent/config.patch
usr/src/lib/libevent/evdns.3.patch
usr/src/lib/libevent/event.3.patch
usr/src/lib/libevent/evport.patch
usr/src/lib/libevent/http.patch
usr/src/lib/libevent/install-sfw
usr/src/lib/libevent/install-sfw-64
usr/src/lib/libevent/libevent-1.3e.tar.gz
usr/src/lib/libevent/libevent-1.4.14b-stable.tar.gz
usr/src/pkgdefs/SUNWlibevent/pkginfo.tmpl
usr/src/pkgdefs/SUNWlibevent/prototype_com
usr/src/pkgdefs/SUNWlibevent/prototype_i386
usr/src/pkgdefs/SUNWlibevent/prototype_sparc
--- a/usr/src/lib/libevent/METADATA	Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/lib/libevent/METADATA	Tue Jun 18 19:18:02 2013 +0100
@@ -1,10 +1,10 @@
 NAME:             libevent
-VERSION:          1.3e
+VERSION:          1.4b
 DESCRIPTION:      execute a callback function when a specific event occurs on a file descriptor or after a timeout
 LICENSE:          BSD
 PACKAGE:          SUNWlibevent
-PROJECT_URL:      http://monkey.org/~provos/libevent/
-SOURCE_DOWNLOAD:  http://monkey.org/~provos/libevent-1.3e.tar.gz
+PROJECT_URL:      http://libevent.org/
+SOURCE_DOWNLOAD:  https://github.com/downloads/libevent/libevent/libevent-1.4.14b-stable.tar.gz
 SUPPORT:          C
 BUGTRAQ:          solaris/library/libevent
 OSR:              10152
--- a/usr/src/lib/libevent/Makefile.in.patch	Tue Jun 18 19:17:37 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-*** ../libevent-1.3e-64/Makefile.in	Mon Sep 24 21:00:56 2007
---- Makefile.in	Fri Oct 19 14:13:31 2007
-***************
-*** 63,74 ****
-  am__DEPENDENCIES_1 =
-  libevent_la_DEPENDENCIES = @LTLIBOBJS@ $(am__DEPENDENCIES_1)
-  am__libevent_la_SOURCES_DIST = event.c buffer.c evbuffer.c log.c \
-! 	event_tagging.c http.c evhttp.h http-internal.h evdns.c \
-! 	evdns.h strlcpy.c strlcpy-internal.h WIN32-Code/misc.c \
-  	WIN32-Code/win32.c
-  @BUILD_WIN32_TRUE@am__objects_1 = misc.lo win32.lo
-  am_libevent_la_OBJECTS = event.lo buffer.lo evbuffer.lo log.lo \
-! 	event_tagging.lo http.lo evdns.lo strlcpy.lo $(am__objects_1)
-  libevent_la_OBJECTS = $(am_libevent_la_OBJECTS)
-  libevent_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-  	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
---- 63,73 ----
-  am__DEPENDENCIES_1 =
-  libevent_la_DEPENDENCIES = @LTLIBOBJS@ $(am__DEPENDENCIES_1)
-  am__libevent_la_SOURCES_DIST = event.c buffer.c evbuffer.c log.c \
-! 	event_tagging.c strlcpy.c strlcpy-internal.h WIN32-Code/misc.c \
-  	WIN32-Code/win32.c
-  @BUILD_WIN32_TRUE@am__objects_1 = misc.lo win32.lo
-  am_libevent_la_OBJECTS = event.lo buffer.lo evbuffer.lo log.lo \
-! 	event_tagging.lo strlcpy.lo $(am__objects_1)
-  libevent_la_OBJECTS = $(am_libevent_la_OBJECTS)
-  libevent_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-  	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-***************
-*** 105,111 ****
-    distclean-recursive maintainer-clean-recursive
-  ETAGS = etags
-  CTAGS = ctags
-! DIST_SUBDIRS = . sample test
-  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-  distdir = $(PACKAGE)-$(VERSION)
-  top_distdir = $(distdir)
---- 104,110 ----
-    distclean-recursive maintainer-clean-recursive
-  ETAGS = etags
-  CTAGS = ctags
-! DIST_SUBDIRS = .
-  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-  distdir = $(PACKAGE)-$(VERSION)
-  top_distdir = $(distdir)
-***************
-*** 230,240 ****
-  	event.3 \
-  	kqueue.c epoll_sub.c epoll.c select.c rtsig.c poll.c signal.c \
-  	evport.c devpoll.c event_rpcgen.py \
-- 	sample/Makefile.am sample/Makefile.in sample/event-test.c \
-- 	sample/signal-test.c sample/time-test.c \
-- 	test/Makefile.am test/Makefile.in test/bench.c test/regress.c \
-- 	test/test-eof.c test/test-weof.c test/test-time.c \
-- 	test/test-init.c test/test.sh \
-  	compat/sys/queue.h compat/sys/tree.h compat/sys/_time.h \
-  	WIN32-Code/config.h WIN32-Code/misc.c \
-  	WIN32-Code/win32.c WIN32-Code/misc.h \
---- 229,234 ----
-***************
-*** 244,251 ****
-  	WIN32-Prj/time_test/time_test.dsp
-  
-  lib_LTLIBRARIES = libevent.la
-! @BUILD_WIN32_FALSE@SUBDIRS = . sample test
-! @BUILD_WIN32_TRUE@SUBDIRS = . sample
-  @BUILD_WIN32_FALSE@SYS_LIBS = 
-  @BUILD_WIN32_TRUE@SYS_LIBS = -lws2_32
-  @BUILD_WIN32_FALSE@SYS_SRC = 
---- 238,245 ----
-  	WIN32-Prj/time_test/time_test.dsp
-  
-  lib_LTLIBRARIES = libevent.la
-! @BUILD_WIN32_FALSE@SUBDIRS = .
-! @BUILD_WIN32_TRUE@SUBDIRS = .
-  @BUILD_WIN32_FALSE@SYS_LIBS = 
-  @BUILD_WIN32_TRUE@SYS_LIBS = -lws2_32
-  @BUILD_WIN32_FALSE@SYS_SRC = 
-***************
-*** 253,265 ****
-  @BUILD_WIN32_FALSE@SYS_INCLUDES = 
-  @BUILD_WIN32_TRUE@SYS_INCLUDES = -IWIN32-Code
-  libevent_la_SOURCES = event.c buffer.c evbuffer.c log.c event_tagging.c \
-! 	http.c evhttp.h http-internal.h evdns.c evdns.h strlcpy.c \
-! 	strlcpy-internal.h strlcpy-internal.h \
-  	$(SYS_SRC)
-  
-  libevent_la_LIBADD = @LTLIBOBJS@ $(SYS_LIBS)
-  libevent_la_LDFLAGS = -release @VERSION@ -version-info 1:3:0
-! include_HEADERS = event.h evhttp.h evdns.h
-  INCLUDES = -Icompat $(SYS_INCLUDES)
-  man_MANS = event.3 evdns.3
-  DISTCLEANFILES = *~
---- 247,258 ----
-  @BUILD_WIN32_FALSE@SYS_INCLUDES = 
-  @BUILD_WIN32_TRUE@SYS_INCLUDES = -IWIN32-Code
-  libevent_la_SOURCES = event.c buffer.c evbuffer.c log.c event_tagging.c \
-! 	strlcpy.c strlcpy-internal.h strlcpy-internal.h \
-  	$(SYS_SRC)
-  
-  libevent_la_LIBADD = @LTLIBOBJS@ $(SYS_LIBS)
-  libevent_la_LDFLAGS = -release @VERSION@ -version-info 1:3:0
-! include_HEADERS = event.h
-  INCLUDES = -Icompat $(SYS_INCLUDES)
-  man_MANS = event.3 evdns.3
-  DISTCLEANFILES = *~
--- a/usr/src/lib/libevent/Makefile.sfw	Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/lib/libevent/Makefile.sfw	Tue Jun 18 19:18:02 2013 +0100
@@ -23,7 +23,7 @@
 #
 #ident	"@(#)Makefile.sfw	1.5	09/09/03 SMI"
 
-VER=libevent-1.3e
+VER=libevent-1.4.14b-stable
 VER64=$(VER)-64
 
 include ../Makefile.lib
@@ -66,9 +66,8 @@
 	    "LDFLAGS =$(LDFLAGS)" \
 	    PATH=$(SFW_PATH) \
 	    "MAKE=$(CCSMAKE)" \
-	    ./configure --prefix=/usr  --enable-threads )
-	patch -N $(VER)/evport.c < evport.patch
-	patch -N $(VER)/http.c < http.patch
+	    ./configure --prefix=/usr --disable-static )
+	patch -N $(VER)/evdns.3 < evdns.3.patch
 	patch -N $(VER)/event.3 < event.3.patch
 
 $(VER64)/config.status: $(VER64)/configure
@@ -77,15 +76,11 @@
 	    "LDFLAGS = $LDFLAGS)" \
 	    PATH=$(SFW_PATH) \
 	    "MAKE=$(CCSMAKE)" \
-	    ./configure --prefix=/usr --enable-threads)
-	patch -N $(VER64)/evport.c < evport.patch
-	patch -N $(VER64)/http.c < http.patch
+	    ./configure --prefix=/usr --disable-static )
 
 
 $(VER)/configure: $(VER).tar.gz
 	gzip -dc $(VER).tar.gz | tar xopf -
-	patch -N $(VER)/Makefile.in < Makefile.in.patch
-	patch -N $(VER)/configure < config.patch
 	touch $(VER)/configure
 
 $(VER64)/configure: $(VER).tar.gz
@@ -93,8 +88,6 @@
 	gzip -dc $(VER).tar.gz | (cd tmp; tar xopf -)
 	rm -rf $(VER64)
 	mv tmp/$(VER) $(VER64); rmdir tmp
-	patch -N $(VER64)/Makefile.in < Makefile.in.patch
-	patch -N $(VER64)/configure < config.patch
 	touch $(VER64)/configure
 clean:
 	-rm -rf $(VER)
--- a/usr/src/lib/libevent/config.patch	Tue Jun 18 19:17:37 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-*** ../libevent-1.3e-64/configure	Wed Oct 17 18:57:31 2007
---- configure	Wed Oct 17 18:56:39 2007
-***************
-*** 9129,9136 ****
-    version_type=linux
-    need_lib_prefix=no
-    need_version=no
-!   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-!   soname_spec='${libname}${release}${shared_ext}$major'
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
---- 9129,9136 ----
-    version_type=linux
-    need_lib_prefix=no
-    need_version=no
-!   library_names_spec='${libname}${shared_ext}$versuffix ${libname}${shared_ext}$major $libname${shared_ext}'
-!   soname_spec='${libname}${shared_ext}$major'
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/lib/libevent/evdns.3.patch	Tue Jun 18 19:18:02 2013 +0100
@@ -0,0 +1,498 @@
+--- libevent-1.4.14b-stable/evdns.3	st lis 25 07:55:34 2009
++++ libevent-1.4.14b-stable/evdns.3	po lis 21 09:31:22 2011
+@@ -25,66 +25,67 @@
+ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ .\"
+-.Dd October 7, 2006
+-.Dt EVDNS 3
+-.Os
+-.Sh NAME
+-.Nm evdns_init
+-.Nm evdns_shutdown
+-.Nm evdns_err_to_string
+-.Nm evdns_nameserver_add
+-.Nm evdns_count_nameservers
+-.Nm evdns_clear_nameservers_and_suspend
+-.Nm evdns_resume
+-.Nm evdns_nameserver_ip_add
+-.Nm evdns_resolve_ipv4
+-.Nm evdns_resolve_reverse
+-.Nm evdns_resolv_conf_parse
+-.Nm evdns_config_windows_nameservers
+-.Nm evdns_search_clear
+-.Nm evdns_search_add
+-.Nm evdns_search_ndots_set
+-.Nm evdns_set_log_fn
+-.Nd asynchronous functions for DNS resolution.
+-.Sh SYNOPSIS
+-.Fd #include <sys/time.h>
+-.Fd #include <event.h>
+-.Fd #include <evdns.h>
+-.Ft int
+-.Fn evdns_init
+-.Ft void
+-.Fn evdns_shutdown "int fail_requests"
+-.Ft "const char *"
+-.Fn evdns_err_to_string "int err"
+-.Ft int
+-.Fn evdns_nameserver_add "unsigned long int address"
+-.Ft int
+-.Fn evdns_count_nameservers
+-.Ft int
+-.Fn evdns_clear_nameservers_and_suspend
+-.Ft int
+-.Fn evdns_resume
+-.Ft int
+-.Fn evdns_nameserver_ip_add(const char *ip_as_string);
+-.Ft int
+-.Fn evdns_resolve_ipv4 "const char *name" "int flags" "evdns_callback_type callback" "void *ptr"
+-.Ft int
+-.Fn evdns_resolve_reverse "struct in_addr *in" "int flags" "evdns_callback_type callback" "void *ptr"
+-.Ft int
+-.Fn evdns_resolv_conf_parse "int flags" "const char *"
+-.Ft void
+-.Fn evdns_search_clear
+-.Ft void
+-.Fn evdns_search_add "const char *domain"
+-.Ft void
+-.Fn evdns_search_ndots_set "const int ndots"
+-.Ft void
+-.Fn evdns_set_log_fn "evdns_debug_log_fn_type fn"
+-.Ft int
+-.Fn evdns_config_windows_nameservers
+-.Sh DESCRIPTION
++.TH EVDNS 3 "21 November 2011" "libevent 1.4.14b" "libevent Manual"
++.SH NAME
++evdns_init,
++evdns_shutdown,
++evdns_err_to_string,
++evdns_nameserver_add,
++evdns_count_nameservers,
++evdns_clear_nameservers_and_suspend,
++evdns_resume,
++evdns_nameserver_ip_add,
++evdns_resolve_ipv4,
++evdns_resolve_reverse,
++evdns_resolv_conf_parse,
++evdns_config_windows_nameservers,
++evdns_search_clear,
++evdns_search_add,
++evdns_search_ndots_set,
++evdns_set_log_fn
++\- asynchronous functions for DNS resolution.
++.SH SYNOPSIS
++.LP
++.nf
++\fB#include <sys/time.h>\fP
++\fB#include <event.h>\fP
++\fB#include <evdns.h>\fP
++
++\fBinit \fBevdns_init\fR\fR(\fBvoid\fP\fR);
++
++\fBvoid \fBevdns_shutdown\fR\fR(\fBint \fIfail_requests\fP\fR);
++
++\fBconst char* \fBevdns_err_to_string\fR\fR(\fBint \fIerr\fP\fR);
++
++\fBint \fBevdns_nameserver_add\fR\fR(\fBunsigned long int \fIaddress\fP\fR);
++
++\fBint \fBevdns_count_nameservers\fR\fR(\fBvoid\fP\fR);
++
++\fBint \fBevdns_clear_nameservers_and_suspend\fR\fR(\fBvoid\fP\fR);
++
++\fBint \fBevdns_resume\fR\fR(\fBvoid\fP\fR);
++
++\fBint \fBevdns_nameserver_ip_add\fR\fR(\fBconst char* \fIip_as_string\fP\fR);
++
++\fBint \fBevdns_resolve_ipv4\fR\fR(\fBconst char* \fIname\fP\fR, \fBint \fIflags\fP\fR, \fBevdns_callback_type \fIcallback\fP\fR, \fBvoid* \fIptr\fP\fR);
++
++\fBint \fBevdns_resolve_reverse\fR\fR(\fBstruct in_addr* \fIin\fP\fR, \fBint \fIflags\fP\fR, \fBevdns_callback_type \fIcallback\fP\fR, \fBvoid* \fIptr\fP\fR);
++
++\fBint \fBevdns_resolv_conf_parse\fR\fR(\fBint \fIflags\fP\fR, \fBconst char* \fIfilename\fP\fR);
++
++\fBvoid \fBevdns_search_clear\fR\fR(\fBvoid\fP\fR);
++
++\fBvoid \fBevdns_search_add\fR\fR(\fBconst char* \fIdomain\fP\fR);
++
++\fBvoid \fBevdns_search_ndots_set\fR\fR(\fBconst int \fIndots\fP\fR);
++
++\fBvoid \fBevdns_set_log_fn\fR\fR(\fBcevdns_debug_log_fn_type \fIfn\fP\fR);
++
++\fBint \fBevdns_config_windows_nameservers\fR\fR(\fBvoid\fP\fR);
++.fi
++.SH DESCRIPTION
+ Welcome, gentle reader
+-.Pp
++.PP
+ Async DNS lookups are really a whole lot harder than they should be,
+ mostly stemming from the fact that the libc resolver has never been
+ very good at them. Before you use this library you should see if libc
+@@ -91,37 +92,49 @@
+ can do the job for you with the modern async call getaddrinfo_a
+ (see http://www.imperialviolet.org/page25.html#e498). Otherwise,
+ please continue.
+-.Pp
++.PP
+ This code is based on libevent and you must call event_init before
+ any of the APIs in this file. You must also seed the OpenSSL random
+ source if you are using OpenSSL for ids (see below).
+-.Pp
++.PP
+ This library is designed to be included and shipped with your source
+ code. You statically link with it. You should also test for the
+ existence of strtok_r and define HAVE_STRTOK_R if you have it.
+-.Pp
++.PP
+ The DNS protocol requires a good source of id numbers and these
+ numbers should be unpredictable for spoofing reasons. There are
+ three methods for generating them here and you must define exactly
+ one of them. In increasing order of preference:
+-.Pp
+-.Bl -tag -width "DNS_USE_GETTIMEOFDAY_FOR_ID" -compact -offset indent
+-.It DNS_USE_GETTIMEOFDAY_FOR_ID
++.PP
++DNS_USE_GETTIMEOFDAY_FOR_ID
++.ad
++.sp .6
++.RS 4n
+ Using the bottom 16 bits of the usec result from gettimeofday. This
+ is a pretty poor solution but should work anywhere.
+-.It DNS_USE_CPU_CLOCK_FOR_ID
++.RE
++.PP
++DNS_USE_CPU_CLOCK_FOR_ID
++.ad
++.sp .6
++.RS 4n
+ Using the bottom 16 bits of the nsec result from the CPU's time
+ counter. This is better, but may not work everywhere. Requires
+ POSIX realtime support and you'll need to link against -lrt on
+ glibc systems at least.
+-.It DNS_USE_OPENSSL_FOR_ID
++.RE
++.PP
++DNS_USE_OPENSSL_FOR_ID
++.ad
++.sp .6
++.RS 4n
+ Uses the OpenSSL RAND_bytes call to generate the data. You must
+ have seeded the pool before making any calls to this library.
+-.El
+-.Pp
++.RE
++.PP
+ The library keeps track of the state of nameservers and will avoid
+ them when they go down. Otherwise it will round robin between them.
+-.Pp
++.PP
+ Quick start guide:
+   #include "evdns.h"
+   void callback(int result, char type, int count, int ttl,
+@@ -128,7 +141,7 @@
+ 	 void *addresses, void *arg);
+   evdns_resolv_conf_parse(DNS_OPTIONS_ALL, "/etc/resolv.conf");
+   evdns_resolve("www.hostname.com", 0, callback, NULL);
+-.Pp
++.PP
+ When the lookup is complete the callback function is called. The
+ first argument will be one of the DNS_ERR_* defines in evdns.h.
+ Hopefully it will be DNS_ERR_NONE, in which case type will be
+@@ -136,152 +149,187 @@
+ which the data can be cached for (in seconds), addresses will point
+ to an array of uint32_t's and arg will be whatever you passed to
+ evdns_resolve.
+-.Pp
++.PP
+ Searching:
+-.Pp
++.PP
+ In order for this library to be a good replacement for glibc's resolver it
+ supports searching. This involves setting a list of default domains, in
+ which names will be queried for. The number of dots in the query name
+ determines the order in which this list is used.
+-.Pp
++.PP
+ Searching appears to be a single lookup from the point of view of the API,
+ although many DNS queries may be generated from a single call to
+ evdns_resolve. Searching can also drastically slow down the resolution
+ of names.
+-.Pp
++.PP
+ To disable searching:
+-.Bl -enum -compact -offset indent
+-.It
+-Never set it up. If you never call
+-.Fn evdns_resolv_conf_parse,
+-.Fn evdns_init,
++.ad
++.sp .6
++.RS 4n
++1. Never set it up. If you never call
++\fBevdns_resolv_conf_parse\fP\fR,
++\fBevdns_init\fP\fR,
+ or
+-.Fn evdns_search_add
++\fBevdns_search_add\fP\R
+ then no searching will occur.
+-.It
+-If you do call
+-.Fn evdns_resolv_conf_parse
++.br
++2. If you do call
++\fBevdns_resolv_conf_parse\fP\fR
+ then don't pass
+-.Va DNS_OPTION_SEARCH
++DNS_OPTION_SEARCH
+ (or
+-.Va DNS_OPTIONS_ALL,
++DNS_OPTIONS_ALL,
+ which implies it).
+-.It
+-When calling
+-.Fn evdns_resolve,
++.br
++3. When calling
++\fBevdns_resolve\fP\fR,
+ pass the
+-.Va DNS_QUERY_NO_SEARCH
++DNS_QUERY_NO_SEARCH
+ flag.
+-.El
+-.Pp
++.RE
++.PP
+ The order of searches depends on the number of dots in the name. If the
+ number is greater than the ndots setting then the names is first tried
+ globally. Otherwise each search domain is appended in turn.
+-.Pp
++.PP
+ The ndots setting can either be set from a resolv.conf, or by calling
+ evdns_search_ndots_set.
+-.Pp
++.PP
+ For example, with ndots set to 1 (the default) and a search domain list of
+ ["myhome.net"]:
+  Query: www
+  Order: www.myhome.net, www.
+-.Pp
++.PP
+  Query: www.abc
+  Order: www.abc., www.abc.myhome.net
+-.Pp
+-.Sh API reference
+-.Pp
+-.Bl -tag -width 0123456
+-.It Ft int Fn evdns_init
++.PP
++.SH API reference
++.PP
++.SS "\fBint \fBevdns_init\fR\fR(\fBvoid\fP\fR)"
++.sp
++.LP
+ Initializes support for non-blocking name resolution by calling
+-.Fn evdns_resolv_conf_parse
++evdns_resolv_conf_parse()
+ on UNIX and
+-.Fn evdns_config_windows_nameservers
++evdns_config_windows_nameservers()
+ on Windows.
+-.It Ft int Fn evdns_nameserver_add "unsigned long int address"
++.SS "\fBint \fBevdns_nameserver_add\fR\fR(\fBunsigned long int\fP\fR \fIaddress\fP\fR)"
++.sp
++.LP
+ Add a nameserver. The address should be an IP address in
+ network byte order. The type of address is chosen so that
+ it matches in_addr.s_addr.
+ Returns non-zero on error.
+-.It Ft int Fn evdns_nameserver_ip_add "const char *ip_as_string"
++.SS "\fBint \fBevdns_nameserver_ip_add\fR\fR(\fBconst char* \fIip_as_string\fP\fR)"
++.sp
++.LP
+ This wraps the above function by parsing a string as an IP
+ address and adds it as a nameserver.
+ Returns non-zero on error
+-.It Ft int Fn evdns_resolve "const char *name" "int flags" "evdns_callback_type callback" "void *ptr"
++.SS "\fBint \fBevdns_resolve\fR\fR(\fBconst char* \fIname\fP\fR, \fBint \fIflags\fP\fR, \fBevdns_callback_type \fIcallback\fP\fR, \fBvoid* \fIptr\fP\fR)"
++.sp
++.LP
+ Resolve a name. The name parameter should be a DNS name.
+ The flags parameter should be 0, or DNS_QUERY_NO_SEARCH
+ which disables searching for this query. (see defn of
+ searching above).
+-.Pp
++.PP
+ The callback argument is a function which is called when
+ this query completes and ptr is an argument which is passed
+ to that callback function.
+-.Pp
++.PP
+ Returns non-zero on error
+-.It Ft void Fn evdns_search_clear
++.SS "\fBvoid \fBevdns_search_clear\fR\fR(\fBvoid\fP\fR)"
++.sp
++.LP
+ Clears the list of search domains
+-.It Ft void Fn evdns_search_add "const char *domain"
++.SS "\fBvoid \fBevdns_search_add\fR\fR(\fBconst char* \fIdomain\fP\fR)"
++.sp
++.LP
+ Add a domain to the list of search domains
+-.It Ft void Fn evdns_search_ndots_set "int ndots"
++.SS "\fBvoid \fBevdns_search_ndots_set\fR\fR(\fBconst int \fIndots\fP\fR)"
++.sp
++.LP
+ Set the number of dots which, when found in a name, causes
+ the first query to be without any search domain.
+-.It Ft int Fn evdns_count_nameservers "void"
++.SS "\fBint \fBevdns_count_nameservers\fR\fR(\fBvoid\fP\fR)"
++.sp
++.LP
+ Return the number of configured nameservers (not necessarily the
+ number of running nameservers).  This is useful for double-checking
+ whether our calls to the various nameserver configuration functions
+ have been successful.
+-.It Ft int Fn evdns_clear_nameservers_and_suspend "void"
++.SS "\fBint \fBevdns_clear_nameservers_and_suspend\fR\fR(\fBvoid\fP\fR)"
++.sp
++.LP
+ Remove all currently configured nameservers, and suspend all pending
+ resolves.  Resolves will not necessarily be re-attempted until
+ evdns_resume() is called.
+-.It Ft int Fn evdns_resume "void"
++.SS "\fBint \fBevdns_resume\fR\fR(\fBvoid\fP\fR)"
++.sp
++.LP
+ Re-attempt resolves left in limbo after an earlier call to
+ evdns_clear_nameservers_and_suspend().
+-.It Ft int Fn evdns_config_windows_nameservers "void"
++.SS "\fBint \fBevdns_config_windows_nameservers\fR\fR(\fBvoid\fP\fR)"
++.sp
++.LP
+ Attempt to configure a set of nameservers based on platform settings on
+ a win32 host.  Preferentially tries to use GetNetworkParams; if that fails,
+ looks in the registry.  Returns 0 on success, nonzero on failure.
+-.It Ft int Fn evdns_resolv_conf_parse "int flags" "const char *filename"
++.SS "\fBint \fBevdns_resolv_conf_parse\fR\fR(\fBint \fIflags\fP\fR, \fBconst char*filename\fP\fR)"
++.sp
++.LP
+ Parse a resolv.conf like file from the given filename.
+-.Pp
++.PP
+ See the man page for resolv.conf for the format of this file.
+ The flags argument determines what information is parsed from
+ this file:
+-.Bl -tag -width "DNS_OPTION_NAMESERVERS" -offset indent -compact -nested
+-.It DNS_OPTION_SEARCH
++.sp
++DNS_OPTION_SEARCH
+ domain, search and ndots options
+-.It DNS_OPTION_NAMESERVERS
++.br
++DNS_OPTION_NAMESERVERS
+ nameserver lines
+-.It DNS_OPTION_MISC
++.br
++DNS_OPTION_MISC
+ timeout and attempts options
+-.It DNS_OPTIONS_ALL
++.br
++DNS_OPTIONS_ALL
+ all of the above
+-.El
+-.Pp
++.PP
+ The following directives are not parsed from the file:
+   sortlist, rotate, no-check-names, inet6, debug
+-.Pp
++.PP
+ Returns non-zero on error:
+-.Bl -tag -width "0" -offset indent -compact -nested
+-.It 0
++.sp
++0
++.br
+ no errors
+-.It 1
++.br
++1
++.br
+ failed to open file
+-.It 2
++.br
++2
++.br
+ failed to stat file
+-.It 3
++.br
++3
++.br
+ file too large
+-.It 4
++.br
++4
++.br
+ out of memory
+-.It 5
++.br
++5
++.br
+ short read from file
+-.El
+-.El
+-.Sh Internals:
++.SH Internals:
+ Requests are kept in two queues. The first is the inflight queue. In
+ this queue requests have an allocated transaction id and nameserver.
+ They will soon be transmitted if they haven't already been.
+-.Pp
++.PP
+ The second is the waiting queue. The size of the inflight ring is
+ limited and all other requests wait in waiting queue for space. This
+ bounds the number of concurrent requests so that we don't flood the
+@@ -288,33 +336,33 @@
+ nameserver. Several algorithms require a full walk of the inflight
+ queue and so bounding its size keeps thing going nicely under huge
+ (many thousands of requests) loads.
+-.Pp
++.PP
+ If a nameserver loses too many requests it is considered down and we
+ try not to use it. After a while we send a probe to that nameserver
+ (a lookup for google.com) and, if it replies, we consider it working
+ again. If the nameserver fails a probe we wait longer to try again
+ with the next probe.
+-.Sh SEE ALSO
+-.Xr event 3 ,
+-.Xr gethostbyname 3 ,
+-.Xr resolv.conf 5
+-.Sh HISTORY
++.SH SEE ALSO
++\fBevent(3)\fR,
++\fBgethostbyname(3)\fR,
++\fBresolv.conf(4)\fR
++.SH HISTORY
+ The
+-.Nm evdns
++\fIevdns\fP\fR
+ API was developed by Adam Langley on top of the
+-.Nm libevent
++\fIlibevent\fP\fR
+ API.
+ The code was integrate into
+-.Nm Tor
++\fITor\fP\fR
+ by Nick Mathewson and finally put into
+-.Nm libevent
++\fIlibevent\fP\fR
+ itself by Niels Provos.
+-.Sh AUTHORS
++.SH AUTHORS
+ The
+-.Nm evdns
++\fIevdns\fP\fR
+ API and code was written by Adam Langley with significant
+ contributions by Nick Mathewson.
+-.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
--- 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
--- a/usr/src/lib/libevent/evport.patch	Tue Jun 18 19:17:37 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,284 +0,0 @@
-*** /home/praks/junk/evport.c	Mon Oct 22 18:32:29 2007
---- evport.c	Mon Oct 22 18:31:33 2007
-***************
-*** 12,31 ****
-   * 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 BY THE AUTHOR ``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.
-   */
-  
-  /*
-!  * Copyright (c) 2006 Sun Microsystems. All rights reserved.
-   * Use is subject to license terms.
-   */
-  
---- 12,31 ----
-   * 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 BY SUN MICROSYSTEMS, INC. ``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 SUN MICROSYSTEMS, INC. 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. 
-   */
-  
-  /*
-!  * Copyright (c) 2007 Sun Microsystems. All rights reserved.
-   * Use is subject to license terms.
-   */
-  
-***************
-*** 118,124 ****
-  	int		ed_nevents;	/* number of allocated fdi's 	 */
-  	struct fd_info *ed_fds;		/* allocated fdi table 		 */
-  	/* fdi's that we need to reassoc */
-! 	struct fd_info *ed_pending[EVENTS_PER_GETN];
-  };
-  
-  static void*	evport_init	(struct event_base *);
---- 118,124 ----
-  	int		ed_nevents;	/* number of allocated fdi's 	 */
-  	struct fd_info *ed_fds;		/* allocated fdi table 		 */
-  	/* fdi's that we need to reassoc */
-! 	int ed_pending[EVENTS_PER_GETN]; /* fd's with pending events */
-  };
-  
-  static void*	evport_init	(struct event_base *);
-***************
-*** 146,151 ****
---- 146,152 ----
-  evport_init(struct event_base *base)
-  {
-  	struct evport_data *evpd;
-+ 	int i;
-  	/*
-  	 * Disable event ports when this environment variable is set 
-  	 */
-***************
-*** 170,176 ****
-  		return (NULL);
-  	}
-  	evpd->ed_nevents = DEFAULT_NFDS;
-! 	memset(&evpd->ed_pending, 0, EVENTS_PER_GETN * sizeof(struct fd_info*));
-  
-  	evsignal_init(base);
-  
---- 171,178 ----
-  		return (NULL);
-  	}
-  	evpd->ed_nevents = DEFAULT_NFDS;
-! 	for (i = 0; i < EVENTS_PER_GETN; i++)
-! 		evpd->ed_pending[i] = -1;
-  
-  	evsignal_init(base);
-  
-***************
-*** 254,268 ****
-  	epdp->ed_fds = tmp;
-  	memset((char*) (epdp->ed_fds + oldsize), 0, 
-  	    (newsize - oldsize)*sizeof(struct fd_info));
-- 
-- 	/* The ev_pending array contains pointers into the released array. */
-- 	for (ii = 0; ii < EVENTS_PER_GETN; ++ii) {
-- 		if (epdp->ed_pending[ii] != 0) {
-- 			int offset = epdp->ed_pending[ii] - old;
-- 			epdp->ed_pending[ii] = epdp->ed_fds + offset;
-- 		}
-- 	}
--         
-  	epdp->ed_nevents = newsize;
-  
-  	check_evportop(epdp);
---- 256,261 ----
-***************
-*** 281,296 ****
-  	int sysevents = FDI_TO_SYSEVENTS(fdip);
-  
-  	if (sysevents != 0) {
-! 		if ((-1 == port_associate(epdp->ed_port, PORT_SOURCE_FD,
-! 		    fd, sysevents, NULL))) {
-! 			perror("port_associate");
-  			return (-1);
-  		}
-- 	} else {
-- 		if (-1 == port_dissociate(epdp->ed_port, PORT_SOURCE_FD, fd)) {
-- 			perror("port_dissociate");
-- 			return (-1);
-- 		}
-  	}
-  
-  	check_evportop(epdp);
---- 274,284 ----
-  	int sysevents = FDI_TO_SYSEVENTS(fdip);
-  
-  	if (sysevents != 0) {
-! 		if (port_associate(epdp->ed_port, PORT_SOURCE_FD,
-! 				   fd, sysevents, NULL) == -1) {
-! 			event_warn("port_associate");
-  			return (-1);
-  		}
-  	}
-  
-  	check_evportop(epdp);
-***************
-*** 337,349 ****
-  	 * loop below.
-  	 */
-  	for (i = 0; i < EVENTS_PER_GETN; ++i) {
-! 		struct fd_info *fdi = epdp->ed_pending[i];
-  
-  		if (fdi != NULL && FDI_HAS_EVENTS(fdi)) {
-  			int fd = FDI_HAS_READ(fdi) ? fdi->fdi_revt->ev_fd : 
-  			    fdi->fdi_wevt->ev_fd;
-  			reassociate(epdp, fdi, fd);
-! 			epdp->ed_pending[i] = NULL;
-  		}
-  	}
-  
---- 325,340 ----
-  	 * loop below.
-  	 */
-  	for (i = 0; i < EVENTS_PER_GETN; ++i) {
-! 		struct fd_info *fdi = NULL;
-! 		if (epdp->ed_pending[i] != -1) {
-! 			fdi = &(epdp->ed_fds[epdp->ed_pending[i]]);
-! 		}
-  
-  		if (fdi != NULL && FDI_HAS_EVENTS(fdi)) {
-  			int fd = FDI_HAS_READ(fdi) ? fdi->fdi_revt->ev_fd : 
-  			    fdi->fdi_wevt->ev_fd;
-  			reassociate(epdp, fdi, fd);
-! 			epdp->ed_pending[i] = -1;
-  		}
-  	}
-  
-***************
-*** 356,362 ****
-  			if (nevents == 0)
-  				return (0);
-  		} else {
-! 			perror("port_getn");
-  			return (-1);
-  		}
-  	} else if (base->sig.evsignal_caught) {
---- 347,353 ----
-  			if (nevents == 0)
-  				return (0);
-  		} else {
-! 			event_warn("port_getn");
-  			return (-1);
-  		}
-  	} else if (base->sig.evsignal_caught) {
-***************
-*** 373,378 ****
---- 364,370 ----
-  
-  		check_evportop(epdp);
-  		check_event(pevt);
-+ 		epdp->ed_pending[i] = fd;
-  
-  		/*
-  		 * Figure out what kind of event it was 
-***************
-*** 405,423 ****
-  				event_del(ev);
-  			event_active(ev, res, 1);
-  		}
-- 
-- 		/*
-- 		 * If there are still events (they haven't been deleted), then
-- 		 * we must reassociate the port, since the event port interface
-- 		 * dissociates them automatically. 
-- 		 *
-- 		 * But we can't do it right away, because the event hasn't
-- 		 * handled this event yet, so of course there's still data
-- 		 * waiting!
-- 		 */
-- 		if(FDI_HAS_EVENTS(fdi)) {
-- 			epdp->ed_pending[i] = fdi;
-- 		}
-  	} /* end of all events gotten */
-  
-  	check_evportop(epdp);
---- 397,402 ----
-***************
-*** 491,496 ****
---- 470,477 ----
-  {
-  	struct evport_data *evpd = arg;
-  	struct fd_info *fdi;
-+ 	int i;
-+ 	int associated = 1;
-  
-  	check_evportop(evpd);
-  
-***************
-*** 505,510 ****
---- 486,497 ----
-  		return (-1);
-  	}
-  
-+ 	for (i = 0; i < EVENTS_PER_GETN; ++i) {
-+ 		if (evpd->ed_pending[i] == ev->ev_fd) {
-+ 			associated = 0;
-+ 			break;
-+ 		}
-+ 	}
-  
-  	fdi = &evpd->ed_fds[ev->ev_fd];
-  	if (ev->ev_events & EV_READ)
-***************
-*** 512,518 ****
-  	if (ev->ev_events & EV_WRITE)
-  		fdi->fdi_wevt = NULL;
-  
-! 	return reassociate(evpd, fdi, ev->ev_fd);
-  }
-  
-  
---- 499,527 ----
-  	if (ev->ev_events & EV_WRITE)
-  		fdi->fdi_wevt = NULL;
-  
-! 	if (associated) {
-! 		if (!FDI_HAS_EVENTS(fdi) &&
-! 		    port_dissociate(evpd->ed_port, PORT_SOURCE_FD,
-! 		    ev->ev_fd) == -1) {	 
-! 			/*
-! 			 * Ignre EBADFD error the fd could have been closed
-! 			 * before event_del() was called.
-! 			 */
-! 			if (errno != EBADFD) {
-! 				event_warn("port_dissociate");
-! 				return (-1);
-! 			}
-! 		} else {
-! 			if (FDI_HAS_EVENTS(fdi)) {
-! 				return (reassociate(evpd, fdi, ev->ev_fd));
-! 			}
-! 		}
-! 	} else {
-! 		if (fdi->fdi_revt == NULL && fdi->fdi_wevt == NULL) {
-! 			evpd->ed_pending[i] = -1;
-! 		}
-! 	}
-! 	return 0;
-  }
-  
-  
--- a/usr/src/lib/libevent/http.patch	Tue Jun 18 19:17:37 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-*** http.c	Wed Sep 12 15:20:34 2007
---- /home/praks/junk/http.c	Mon Oct  1 10:21:01 2007
-***************
-*** 157,166 ****
-  		return NULL;
-  	tok = *s;
-  	d = strstr(tok, del);
-! 	if (d)
-  		*s = d + strlen(del);
-! 	else
-  		*s = NULL;
-  	return tok;
-  }
-  #endif
---- 157,169 ----
-  		return NULL;
-  	tok = *s;
-  	d = strstr(tok, del);
-! 	if (d) {
-  		*s = d + strlen(del);
-! 		d[0]='\0';
-! 	} else {
-  		*s = NULL;
-+ 	}
-+ 
-  	return tok;
-  }
-  #endif
--- a/usr/src/lib/libevent/install-sfw	Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/lib/libevent/install-sfw	Tue Jun 18 19:18:02 2013 +0100
@@ -25,21 +25,14 @@
 #
 #ident	"@(#)install-sfw	1.2	08/05/15 SMI"
 
-#The libevent that is bundled with Solaris is a trimed down version.
-#It does not contain the evhttp*, evdns* functions. The man page 'event.3'
-#is patched to remove descriptions regarding these functions.
-#
 #The original manpage is in a format that the Solaris man command does
 #not understand. Hence it has been manually converted.
 #
 #List of files from the original package that are not being delivered
 #
-#/usr/share/man/man3/evdns.3
-#/usr/include/evhttp.h
-#/usr/include/evdns.h
 #/usr/bin/event_rpcgen.py
 
-VERS=libevent-1.3e
+VERS=libevent-1.4.14b-stable
 
 PREFIX=${ROOT}/usr
 LIBDIR=${PREFIX}/lib
@@ -53,12 +46,25 @@
 
 cd ${VERS}
 
-_install D .libs/libevent.so.1.0.3 ${LIBDIR}/libevent.so.1.0.3 555
+_install D .libs/libevent-1.4.so.2.2.0 ${LIBDIR}/libevent-1.4.so.2.2.0 555
+_install D .libs/libevent_core-1.4.so.2.2.0 ${LIBDIR}/libevent_core-1.4.so.2.2.0 555
+_install D .libs/libevent_extra-1.4.so.2.2.0 ${LIBDIR}/libevent_extra-1.4.so.2.2.0 555
+_install N evdns.h ${INCDIR}/evdns.h 444
 _install N event.h ${INCDIR}/event.h 444
-_install L libevent.so.1.0.3 ${LIBDIR}/libevent.so.1
-_install L libevent.so.1.0.3 ${LIBDIR}/libevent.so
+_install N event-config.h ${INCDIR}/event-config.h 444
+_install N evhttp.h ${INCDIR}/evhttp.h 444
+_install N evrpc.h ${INCDIR}/evrpc.h 444
+_install N evutil.h ${INCDIR}/evutil.h 444
+_install L libevent-1.4.so.2.2.0 ${LIBDIR}/libevent.so
+_install L libevent-1.4.so.2.2.0 ${LIBDIR}/libevent.so.1
+_install L libevent-1.4.so.2.2.0 ${LIBDIR}/libevent-1.4.so.2
+_install L libevent_core-1.4.so.2.2.0 ${LIBDIR}/libevent_core.so
+_install L libevent_core-1.4.so.2.2.0 ${LIBDIR}/libevent_core-1.4.so.2
+_install L libevent_extra-1.4.so.2.2.0 ${LIBDIR}/libevent_extra.so
+_install L libevent_extra-1.4.so.2.2.0 ${LIBDIR}/libevent_extra-1.4.so.2
 _install N ../llib-levent ${LIBDIR}/llib-levent 0644
 _install N llib-levent.ln ${LIBDIR}/llib-levent.ln 0644
+_install M evdns.3 ${MAN3DIR}/evdns.3 444
 _install M event.3 ${MAN3DIR}/event.3 444
 _install N ../libevent.3 ${MAN3DIR}/libevent.3 444
 
--- a/usr/src/lib/libevent/install-sfw-64	Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/lib/libevent/install-sfw-64	Tue Jun 18 19:18:02 2013 +0100
@@ -25,7 +25,7 @@
 #
 #ident	"@(#)install-sfw-64	1.2	08/05/15 SMI"
 
-VERS=libevent-1.3e-64
+VERS=libevent-1.4.14b-stable-64
 
 PREFIX=${ROOT}/usr
 LIBDIR=${PREFIX}/lib/${MACH64}
@@ -35,9 +35,16 @@
 
 cd ${VERS}
 
-_install D .libs/libevent.so.1.0.3 ${LIBDIR}/libevent.so.1.0.3 555
-_install L libevent.so.1.0.3 ${LIBDIR}/libevent.so.1
-_install L libevent.so.1.0.3 ${LIBDIR}/libevent.so
+_install D .libs/libevent-1.4.so.2.2.0 ${LIBDIR}/libevent-1.4.so.2.2.0 555
+_install D .libs/libevent_core-1.4.so.2.2.0 ${LIBDIR}/libevent_core-1.4.so.2.2.0 555
+_install D .libs/libevent_extra-1.4.so.2.2.0 ${LIBDIR}/libevent_extra-1.4.so.2.2.0 555
+_install L libevent-1.4.so.2.2.0 ${LIBDIR}/libevent.so
+_install L libevent-1.4.so.2.2.0 ${LIBDIR}/libevent.so.1
+_install L libevent-1.4.so.2.2.0 ${LIBDIR}/libevent-1.4.so.2
+_install L libevent_core-1.4.so.2.2.0 ${LIBDIR}/libevent_core.so
+_install L libevent_core-1.4.so.2.2.0 ${LIBDIR}/libevent_core-1.4.so.2
+_install L libevent_extra-1.4.so.2.2.0 ${LIBDIR}/libevent_extra.so
+_install L libevent_extra-1.4.so.2.2.0 ${LIBDIR}/libevent_extra-1.4.so.2
 _install N llib-levent.ln ${LIBDIR}/llib-levent.ln 0644
 
 exit 0
Binary file usr/src/lib/libevent/libevent-1.3e.tar.gz has changed
Binary file usr/src/lib/libevent/libevent-1.4.14b-stable.tar.gz has changed
--- a/usr/src/pkgdefs/SUNWlibevent/pkginfo.tmpl	Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/pkgdefs/SUNWlibevent/pkginfo.tmpl	Tue Jun 18 19:18:02 2013 +0100
@@ -38,7 +38,7 @@
 SUNW_PKGTYPE="usr"
 MAXINST="1000"
 CATEGORY="system"
-DESC="Libevent - an event notification library (1.3e)"
+DESC="Libevent - an event notification library (1.4b)"
 VENDOR="COMPANY"
 HOTLINE="Please contact your local service provider"
 EMAIL=""
--- a/usr/src/pkgdefs/SUNWlibevent/prototype_com	Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/pkgdefs/SUNWlibevent/prototype_com	Tue Jun 18 19:18:02 2013 +0100
@@ -46,16 +46,28 @@
 #
 d none usr 755 root sys
 d none usr/lib 755 root bin 
-f none usr/lib/libevent.so.1.0.3 555 root bin
-s none usr/lib/libevent.so.1=libevent.so.1.0.3
-s none usr/lib/libevent.so=libevent.so.1.0.3
+f none usr/lib/libevent-1.4.so.2.2.0 555 root bin
+s none usr/lib/libevent.so=libevent-1.4.so.2.2.0
+s none usr/lib/libevent.so.1=libevent-1.4.so.2.2.0
+s none usr/lib/libevent-1.4.so.2=libevent-1.4.so.2.2.0
+f none usr/lib/libevent_core-1.4.so.2.2.0 555 root bin
+s none usr/lib/libevent_core.so=libevent_core-1.4.so.2.2.0
+s none usr/lib/libevent_core-1.4.so.2=libevent_core-1.4.so.2.2.0
+f none usr/lib/libevent_extra-1.4.so.2.2.0 555 root bin
+s none usr/lib/libevent_extra.so=libevent_extra-1.4.so.2.2.0
+s none usr/lib/libevent_extra-1.4.so.2=libevent_extra-1.4.so.2.2.0
 f none usr/lib/llib-levent 0644 root bin
 f none usr/lib/llib-levent.ln 0644 root bin
-d none usr/bin 755 root bin
 d none usr/include 755 root bin
+f none usr/include/evdns.h 444 root bin
 f none usr/include/event.h 444 root bin
+f none usr/include/event-config.h 444 root bin
+f none usr/include/evhttp.h 444 root bin
+f none usr/include/evrpc.h 444 root bin
+f none usr/include/evutil.h 444 root bin
 d none usr/share 755 root sys
 d none usr/share/man 755 root bin
 d none usr/share/man/man3 755 root bin
+f none usr/share/man/man3/evdns.3 444 root bin
 f none usr/share/man/man3/event.3 444 root bin
 f none usr/share/man/man3/libevent.3 444 root bin
--- a/usr/src/pkgdefs/SUNWlibevent/prototype_i386	Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/pkgdefs/SUNWlibevent/prototype_i386	Tue Jun 18 19:18:02 2013 +0100
@@ -49,7 +49,14 @@
 # source locations relative to the prototype file
 #
 d none usr/lib/amd64 755 root bin
-f none usr/lib/amd64/libevent.so.1.0.3 555 root bin
-s none usr/lib/amd64/libevent.so.1=libevent.so.1.0.3
-s none usr/lib/amd64/libevent.so=libevent.so.1.0.3
+f none usr/lib/amd64/libevent-1.4.so.2.2.0 555 root bin
+s none usr/lib/amd64/libevent.so=libevent-1.4.so.2.2.0
+s none usr/lib/amd64/libevent.so.1=libevent-1.4.so.2.2.0
+s none usr/lib/amd64/libevent-1.4.so.2=libevent-1.4.so.2.2.0
+f none usr/lib/amd64/libevent_core-1.4.so.2.2.0 555 root bin
+s none usr/lib/amd64/libevent_core.so=libevent_core-1.4.so.2.2.0
+s none usr/lib/amd64/libevent_core-1.4.so.2=libevent_core-1.4.so.2.2.0
+f none usr/lib/amd64/libevent_extra-1.4.so.2.2.0 555 root bin
+s none usr/lib/amd64/libevent_extra.so=libevent_extra-1.4.so.2.2.0
+s none usr/lib/amd64/libevent_extra-1.4.so.2=libevent_extra-1.4.so.2.2.0
 f none usr/lib/amd64/llib-levent.ln 0644 root bin
--- a/usr/src/pkgdefs/SUNWlibevent/prototype_sparc	Tue Jun 18 19:17:37 2013 +0100
+++ b/usr/src/pkgdefs/SUNWlibevent/prototype_sparc	Tue Jun 18 19:18:02 2013 +0100
@@ -52,7 +52,14 @@
 #
 #
 d none usr/lib/sparcv9 755 root bin
-f none usr/lib/sparcv9/libevent.so.1.0.3 555 root bin
-s none usr/lib/sparcv9/libevent.so.1=libevent.so.1.0.3
-s none usr/lib/sparcv9/libevent.so=libevent.so.1.0.3
+f none usr/lib/sparcv9/libevent-1.4.so.2.2.0 555 root bin
+s none usr/lib/sparcv9/libevent.so=libevent-1.4.so.2.2.0
+s none usr/lib/sparcv9/libevent.so.1=libevent-1.4.so.2.2.0
+s none usr/lib/sparcv9/libevent-1.4.so.2=libevent-1.4.so.2.2.0
+f none usr/lib/sparcv9/libevent_core-1.4.so.2.2.0 555 root bin
+s none usr/lib/sparcv9/libevent_core.so=libevent_core-1.4.so.2.2.0
+s none usr/lib/sparcv9/libevent_core-1.4.so.2=libevent_core-1.4.so.2.2.0
+f none usr/lib/sparcv9/libevent_extra-1.4.so.2.2.0 555 root bin
+s none usr/lib/sparcv9/libevent_extra.so=libevent_extra-1.4.so.2.2.0
+s none usr/lib/sparcv9/libevent_extra-1.4.so.2=libevent_extra-1.4.so.2.2.0
 f none usr/lib/sparcv9/llib-levent.ln 0644 root bin