#define USE_SELECT 1
EOF
+elif test "$ac_cv_func_kqueue" = "yes" ; then
+ SELECT_TYPE="kqueue"
+ cat >> confdefs.h <<\EOF
+#define USE_KQUEUE 1
+EOF
+
else
- echo "Eep! Can't find poll or select!"
+ echo "Eep! Can't find poll, kqueue or select!"
echo "I'll try select and hope for the best."
SELECT_TYPE="select"
cat >> confdefs.h <<\EOF
fi
echo "Using ${SELECT_TYPE} for select loop."
-cat >> confdefs.h <<EOF
-#define SELECT_TYPE "$SELECT_TYPE"
-EOF
-
echo $ac_n "checking if setresuid is implemented""... $ac_c" 1>&6
-echo "configure:6902: checking if setresuid is implemented" >&5
+echo "configure:6904: checking if setresuid is implemented" >&5
if eval "test \"`echo '$''{'ac_cv_func_setresuid'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 6910 "configure"
+#line 6912 "configure"
#include "confdefs.h"
#include <stdlib.h>
}
EOF
-if { (eval echo configure:6923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_setresuid="yes"
else
if test "$IPF_TRANSPARENT" ; then
echo $ac_n "checking if IP-Filter header files are installed""... $ac_c" 1>&6
-echo "configure:6969: checking if IP-Filter header files are installed" >&5
+echo "configure:6971: checking if IP-Filter header files are installed" >&5
# hold on to your hats...
if test "$ac_cv_header_ip_compat_h" = "yes" ||
test "$ac_cv_header_ip_fil_compat_h" = "yes" ||
if test "$LINUX_NETFILTER" ; then
echo $ac_n "checking if Linux 2.4 kernel header files are installed""... $ac_c" 1>&6
-echo "configure:7010: checking if Linux 2.4 kernel header files are installed" >&5
+echo "configure:7012: checking if Linux 2.4 kernel header files are installed" >&5
# hold on to your hats...
if test "$ac_cv_header_linux_netfilter_ipv4_h" = "yes"; then
LINUX_NETFILTER="yes"
esac
fi
echo $ac_n "checking if GNUregex needs to be compiled""... $ac_c" 1>&6
-echo "configure:7044: checking if GNUregex needs to be compiled" >&5
+echo "configure:7046: checking if GNUregex needs to be compiled" >&5
if test -z "$USE_GNUREGEX"; then
if test "$ac_cv_func_regcomp" = "no" || test "$USE_GNUREGEX" = "yes" ; then
USE_GNUREGEX="yes"
else
cat > conftest.$ac_ext <<EOF
-#line 7050 "configure"
+#line 7052 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <regex.h>
regex_t t; regcomp(&t,"",0);
; return 0; }
EOF
-if { (eval echo configure:7058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
USE_GNUREGEX="no"
else
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7089: checking for $ac_func" >&5
+echo "configure:7091: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7094 "configure"
+#line 7096 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:7117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo $ac_n "checking Default FD_SETSIZE value""... $ac_c" 1>&6
-echo "configure:7145: checking Default FD_SETSIZE value" >&5
+echo "configure:7147: checking Default FD_SETSIZE value" >&5
if test "$cross_compiling" = yes; then
DEFAULT_FD_SETSIZE=256
else
cat > conftest.$ac_ext <<EOF
-#line 7150 "configure"
+#line 7152 "configure"
#include "confdefs.h"
#if HAVE_STDIO_H
}
EOF
-if { (eval echo configure:7175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7177: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
DEFAULT_FD_SETSIZE=`cat conftestval`
else
echo $ac_n "checking Maximum number of filedescriptors we can open""... $ac_c" 1>&6
-echo "configure:7194: checking Maximum number of filedescriptors we can open" >&5
+echo "configure:7196: checking Maximum number of filedescriptors we can open" >&5
TLDFLAGS="$LDFLAGS"
case $host in
i386-unknown-freebsd*)
SQUID_MAXFD=256
else
cat > conftest.$ac_ext <<EOF
-#line 7206 "configure"
+#line 7208 "configure"
#include "confdefs.h"
#include <stdio.h>
}
EOF
-if { (eval echo configure:7266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
SQUID_MAXFD=`cat conftestval`
else
LDFLAGS="$TLDFLAGS"
echo $ac_n "checking Default UDP send buffer size""... $ac_c" 1>&6
-echo "configure:7293: checking Default UDP send buffer size" >&5
+echo "configure:7295: checking Default UDP send buffer size" >&5
if test "$cross_compiling" = yes; then
SQUID_UDP_SO_SNDBUF=16384
else
cat > conftest.$ac_ext <<EOF
-#line 7298 "configure"
+#line 7300 "configure"
#include "confdefs.h"
#include <stdlib.h>
}
EOF
-if { (eval echo configure:7319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
SQUID_UDP_SO_SNDBUF=`cat conftestval`
else
echo $ac_n "checking Default UDP receive buffer size""... $ac_c" 1>&6
-echo "configure:7338: checking Default UDP receive buffer size" >&5
+echo "configure:7340: checking Default UDP receive buffer size" >&5
if test "$cross_compiling" = yes; then
SQUID_UDP_SO_RCVBUF=16384
else
cat > conftest.$ac_ext <<EOF
-#line 7343 "configure"
+#line 7345 "configure"
#include "confdefs.h"
#include <stdlib.h>
}
EOF
-if { (eval echo configure:7364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
SQUID_UDP_SO_RCVBUF=`cat conftestval`
else
echo $ac_n "checking Default TCP send buffer size""... $ac_c" 1>&6
-echo "configure:7383: checking Default TCP send buffer size" >&5
+echo "configure:7385: checking Default TCP send buffer size" >&5
if test "$cross_compiling" = yes; then
SQUID_TCP_SO_SNDBUF=16384
else
cat > conftest.$ac_ext <<EOF
-#line 7388 "configure"
+#line 7390 "configure"
#include "confdefs.h"
#include <stdlib.h>
}
EOF
-if { (eval echo configure:7409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
SQUID_TCP_SO_SNDBUF=`cat conftestval`
else
echo $ac_n "checking Default TCP receive buffer size""... $ac_c" 1>&6
-echo "configure:7428: checking Default TCP receive buffer size" >&5
+echo "configure:7430: checking Default TCP receive buffer size" >&5
if test "$cross_compiling" = yes; then
SQUID_TCP_SO_RCVBUF=16384
else
cat > conftest.$ac_ext <<EOF
-#line 7433 "configure"
+#line 7435 "configure"
#include "confdefs.h"
#include <stdlib.h>
}
EOF
-if { (eval echo configure:7454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
SQUID_TCP_SO_RCVBUF=`cat conftestval`
else
echo $ac_n "checking if sys_errlist is already defined""... $ac_c" 1>&6
-echo "configure:7473: checking if sys_errlist is already defined" >&5
+echo "configure:7475: checking if sys_errlist is already defined" >&5
if eval "test \"`echo '$''{'ac_cv_needs_sys_errlist'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7478 "configure"
+#line 7480 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
char *s = sys_errlist;
; return 0; }
EOF
-if { (eval echo configure:7485: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7487: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_needs_sys_errlist="no"
else
fi
echo $ac_n "checking for libresolv _dns_ttl_ hack""... $ac_c" 1>&6
-echo "configure:7507: checking for libresolv _dns_ttl_ hack" >&5
+echo "configure:7509: checking for libresolv _dns_ttl_ hack" >&5
cat > conftest.$ac_ext <<EOF
-#line 7509 "configure"
+#line 7511 "configure"
#include "confdefs.h"
extern int _dns_ttl_;
int main() {
return _dns_ttl_;
; return 0; }
EOF
-if { (eval echo configure:7516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
cat >> confdefs.h <<\EOF
rm -f conftest*
echo $ac_n "checking if inet_ntoa() actually works""... $ac_c" 1>&6
-echo "configure:7532: checking if inet_ntoa() actually works" >&5
+echo "configure:7534: checking if inet_ntoa() actually works" >&5
if test "$cross_compiling" = yes; then
INET_NTOA_RESULT="broken"
else
cat > conftest.$ac_ext <<EOF
-#line 7537 "configure"
+#line 7539 "configure"
#include "confdefs.h"
#include <stdlib.h>
}
EOF
-if { (eval echo configure:7556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
INET_NTOA_RESULT=`cat conftestval`
else
if test "$ac_cv_header_sys_statvfs_h" = "yes" ; then
echo $ac_n "checking for working statvfs() interface""... $ac_c" 1>&6
-echo "configure:7582: checking for working statvfs() interface" >&5
+echo "configure:7584: checking for working statvfs() interface" >&5
cat > conftest.$ac_ext <<EOF
-#line 7584 "configure"
+#line 7586 "configure"
#include "confdefs.h"
#include <stdlib.h>
; return 0; }
EOF
-if { (eval echo configure:7601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7603: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_func_statvfs=yes
else
fi
echo $ac_n "checking for _res.nsaddr_list""... $ac_c" 1>&6
-echo "configure:7621: checking for _res.nsaddr_list" >&5
+echo "configure:7623: checking for _res.nsaddr_list" >&5
if eval "test \"`echo '$''{'ac_cv_have_res_nsaddr_list'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7626 "configure"
+#line 7628 "configure"
#include "confdefs.h"
#if HAVE_SYS_TYPES_H
_res.nsaddr_list[0];
; return 0; }
EOF
-if { (eval echo configure:7649: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_have_res_nsaddr_list="yes"
else
if test $ac_cv_have_res_nsaddr_list = "no" ; then
echo $ac_n "checking for _res.ns_list""... $ac_c" 1>&6
-echo "configure:7671: checking for _res.ns_list" >&5
+echo "configure:7673: checking for _res.ns_list" >&5
if eval "test \"`echo '$''{'ac_cv_have_res_ns_list'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7676 "configure"
+#line 7678 "configure"
#include "confdefs.h"
#if HAVE_SYS_TYPES_H
_res.ns_list[0].addr;
; return 0; }
EOF
-if { (eval echo configure:7699: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_have_res_ns_list="yes"
else
dnl
dnl Duane Wessels, wessels@nlanr.net, February 1996 (autoconf v2.9)
dnl
-dnl $Id: configure.in,v 1.255 2001/12/27 02:18:24 hno Exp $
+dnl $Id: configure.in,v 1.256 2002/01/01 09:47:47 adrian Exp $
dnl
dnl
dnl
AC_CONFIG_AUX_DIR(cfgaux)
AM_INIT_AUTOMAKE(squid, 2.6-DEVEL)
AM_CONFIG_HEADER(include/autoconf.h)
-AC_REVISION($Revision: 1.255 $)dnl
+AC_REVISION($Revision: 1.256 $)dnl
AC_PREFIX_DEFAULT(/usr/local/squid)
AM_MAINTAINER_MODE
elif test "$ac_cv_func_select" = "yes" ; then
SELECT_TYPE="select"
AC_DEFINE(USE_SELECT)
+elif test "$ac_cv_func_kqueue" = "yes" ; then
+ SELECT_TYPE="kqueue"
+ AC_DEFINE(USE_KQUEUE)
else
- echo "Eep! Can't find poll or select!"
+ echo "Eep! Can't find poll, kqueue or select!"
echo "I'll try select and hope for the best."
SELECT_TYPE="select"
AC_DEFINE(USE_SELECT)
fi
echo "Using ${SELECT_TYPE} for select loop."
-AC_DEFINE_UNQUOTED(SELECT_TYPE, "$SELECT_TYPE")
dnl Yay! Another Linux brokenness. Its not good enough
/* Define to `int' if <sys/types.h> doesn't define. */
#undef pid_t
-/* Define to the type of arg1 for select(). */
-#undef SELECT_TYPE_ARG1
-
-/* Define to the type of args 2, 3 and 4 for select(). */
-#undef SELECT_TYPE_ARG234
-
-/* Define to the type of arg5 for select(). */
-#undef SELECT_TYPE_ARG5
-
/* Define to `unsigned' if <sys/types.h> doesn't define. */
#undef size_t
/* Support for poll/select/etc stuff */
#undef USE_POLL
#undef USE_SELECT
+#undef USE_KQUEUE
/* The number of bytes in a __int64. */
#undef SIZEOF___INT64
#
# Makefile for the Squid Object Cache server
#
-# $Id: Makefile.am,v 1.19 2001/12/27 00:23:31 hno Exp $
+# $Id: Makefile.am,v 1.20 2002/01/01 09:47:48 adrian Exp $
#
# Uncomment and customize the following to suit your needs:
#
comm.c \
comm_select.c \
comm_poll.c \
+ comm_kqueue.c \
debug.c \
defines.h \
$(DELAY_POOL_SOURCE) \
#
# Makefile for the Squid Object Cache server
#
-# $Id: Makefile.in,v 1.229 2001/12/27 01:03:56 hno Exp $
+# $Id: Makefile.in,v 1.230 2002/01/01 09:47:48 adrian Exp $
#
# Uncomment and customize the following to suit your needs:
#
comm.c \
comm_select.c \
comm_poll.c \
+ comm_kqueue.c \
debug.c \
defines.h \
$(DELAY_POOL_SOURCE) \
authenticate.$(OBJEXT) cache_cf.$(OBJEXT) CacheDigest.$(OBJEXT) \
cache_manager.$(OBJEXT) carp.$(OBJEXT) cbdata.$(OBJEXT) \
client_db.$(OBJEXT) client_side.$(OBJEXT) comm.$(OBJEXT) \
- comm_select.$(OBJEXT) comm_poll.$(OBJEXT) debug.$(OBJEXT) \
- $(am__objects_3) disk.$(OBJEXT) $(am__objects_4) \
- errorpage.$(OBJEXT) ETag.$(OBJEXT) event.$(OBJEXT) fd.$(OBJEXT) \
- filemap.$(OBJEXT) forward.$(OBJEXT) fqdncache.$(OBJEXT) \
- ftp.$(OBJEXT) gopher.$(OBJEXT) helper.$(OBJEXT) \
- $(am__objects_5) http.$(OBJEXT) HttpStatusLine.$(OBJEXT) \
- HttpHdrCc.$(OBJEXT) HttpHdrRange.$(OBJEXT) \
- HttpHdrContRange.$(OBJEXT) HttpHeader.$(OBJEXT) \
- HttpHeaderTools.$(OBJEXT) HttpBody.$(OBJEXT) HttpMsg.$(OBJEXT) \
- HttpReply.$(OBJEXT) HttpRequest.$(OBJEXT) icmp.$(OBJEXT) \
- icp_v2.$(OBJEXT) icp_v3.$(OBJEXT) ident.$(OBJEXT) \
- internal.$(OBJEXT) ipc.$(OBJEXT) ipcache.$(OBJEXT) \
- $(am__objects_6) logfile.$(OBJEXT) main.$(OBJEXT) mem.$(OBJEXT) \
+ comm_select.$(OBJEXT) comm_poll.$(OBJEXT) comm_kqueue.$(OBJEXT) \
+ debug.$(OBJEXT) $(am__objects_3) disk.$(OBJEXT) \
+ $(am__objects_4) errorpage.$(OBJEXT) ETag.$(OBJEXT) \
+ event.$(OBJEXT) fd.$(OBJEXT) filemap.$(OBJEXT) \
+ forward.$(OBJEXT) fqdncache.$(OBJEXT) ftp.$(OBJEXT) \
+ gopher.$(OBJEXT) helper.$(OBJEXT) $(am__objects_5) \
+ http.$(OBJEXT) HttpStatusLine.$(OBJEXT) HttpHdrCc.$(OBJEXT) \
+ HttpHdrRange.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \
+ HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \
+ HttpBody.$(OBJEXT) HttpMsg.$(OBJEXT) HttpReply.$(OBJEXT) \
+ HttpRequest.$(OBJEXT) icmp.$(OBJEXT) icp_v2.$(OBJEXT) \
+ icp_v3.$(OBJEXT) ident.$(OBJEXT) internal.$(OBJEXT) \
+ ipc.$(OBJEXT) ipcache.$(OBJEXT) $(am__objects_6) \
+ logfile.$(OBJEXT) main.$(OBJEXT) mem.$(OBJEXT) \
MemPool.$(OBJEXT) MemBuf.$(OBJEXT) mime.$(OBJEXT) \
multicast.$(OBJEXT) neighbors.$(OBJEXT) net_db.$(OBJEXT) \
Packer.$(OBJEXT) pconn.$(OBJEXT) peer_digest.$(OBJEXT) \
@AMDEP_TRUE@ $(DEPDIR)/carp.Po $(DEPDIR)/cbdata.Po \
@AMDEP_TRUE@ $(DEPDIR)/cf_gen.Po $(DEPDIR)/client.Po \
@AMDEP_TRUE@ $(DEPDIR)/client_db.Po $(DEPDIR)/client_side.Po \
-@AMDEP_TRUE@ $(DEPDIR)/comm.Po $(DEPDIR)/comm_poll.Po \
-@AMDEP_TRUE@ $(DEPDIR)/comm_select.Po $(DEPDIR)/debug.Po \
-@AMDEP_TRUE@ $(DEPDIR)/delay_pools.Po $(DEPDIR)/disk.Po \
-@AMDEP_TRUE@ $(DEPDIR)/dns.Po $(DEPDIR)/dns_internal.Po \
-@AMDEP_TRUE@ $(DEPDIR)/dnsserver.Po $(DEPDIR)/errorpage.Po \
-@AMDEP_TRUE@ $(DEPDIR)/event.Po $(DEPDIR)/fd.Po \
-@AMDEP_TRUE@ $(DEPDIR)/filemap.Po $(DEPDIR)/forward.Po \
-@AMDEP_TRUE@ $(DEPDIR)/fqdncache.Po $(DEPDIR)/ftp.Po \
-@AMDEP_TRUE@ $(DEPDIR)/globals.Po $(DEPDIR)/gopher.Po \
-@AMDEP_TRUE@ $(DEPDIR)/helper.Po $(DEPDIR)/htcp.Po \
-@AMDEP_TRUE@ $(DEPDIR)/http.Po $(DEPDIR)/icmp.Po \
-@AMDEP_TRUE@ $(DEPDIR)/icp_v2.Po $(DEPDIR)/icp_v3.Po \
-@AMDEP_TRUE@ $(DEPDIR)/ident.Po $(DEPDIR)/internal.Po \
-@AMDEP_TRUE@ $(DEPDIR)/ipc.Po $(DEPDIR)/ipcache.Po \
-@AMDEP_TRUE@ $(DEPDIR)/leakfinder.Po $(DEPDIR)/logfile.Po \
-@AMDEP_TRUE@ $(DEPDIR)/main.Po $(DEPDIR)/mem.Po \
-@AMDEP_TRUE@ $(DEPDIR)/mime.Po $(DEPDIR)/multicast.Po \
-@AMDEP_TRUE@ $(DEPDIR)/neighbors.Po $(DEPDIR)/net_db.Po \
-@AMDEP_TRUE@ $(DEPDIR)/pconn.Po $(DEPDIR)/peer_digest.Po \
-@AMDEP_TRUE@ $(DEPDIR)/peer_select.Po $(DEPDIR)/pinger.Po \
-@AMDEP_TRUE@ $(DEPDIR)/redirect.Po $(DEPDIR)/referer.Po \
-@AMDEP_TRUE@ $(DEPDIR)/refresh.Po $(DEPDIR)/repl_modules.Po \
+@AMDEP_TRUE@ $(DEPDIR)/comm.Po $(DEPDIR)/comm_kqueue.Po \
+@AMDEP_TRUE@ $(DEPDIR)/comm_poll.Po $(DEPDIR)/comm_select.Po \
+@AMDEP_TRUE@ $(DEPDIR)/debug.Po $(DEPDIR)/delay_pools.Po \
+@AMDEP_TRUE@ $(DEPDIR)/disk.Po $(DEPDIR)/dns.Po \
+@AMDEP_TRUE@ $(DEPDIR)/dns_internal.Po $(DEPDIR)/dnsserver.Po \
+@AMDEP_TRUE@ $(DEPDIR)/errorpage.Po $(DEPDIR)/event.Po \
+@AMDEP_TRUE@ $(DEPDIR)/fd.Po $(DEPDIR)/filemap.Po \
+@AMDEP_TRUE@ $(DEPDIR)/forward.Po $(DEPDIR)/fqdncache.Po \
+@AMDEP_TRUE@ $(DEPDIR)/ftp.Po $(DEPDIR)/globals.Po \
+@AMDEP_TRUE@ $(DEPDIR)/gopher.Po $(DEPDIR)/helper.Po \
+@AMDEP_TRUE@ $(DEPDIR)/htcp.Po $(DEPDIR)/http.Po \
+@AMDEP_TRUE@ $(DEPDIR)/icmp.Po $(DEPDIR)/icp_v2.Po \
+@AMDEP_TRUE@ $(DEPDIR)/icp_v3.Po $(DEPDIR)/ident.Po \
+@AMDEP_TRUE@ $(DEPDIR)/internal.Po $(DEPDIR)/ipc.Po \
+@AMDEP_TRUE@ $(DEPDIR)/ipcache.Po $(DEPDIR)/leakfinder.Po \
+@AMDEP_TRUE@ $(DEPDIR)/logfile.Po $(DEPDIR)/main.Po \
+@AMDEP_TRUE@ $(DEPDIR)/mem.Po $(DEPDIR)/mime.Po \
+@AMDEP_TRUE@ $(DEPDIR)/multicast.Po $(DEPDIR)/neighbors.Po \
+@AMDEP_TRUE@ $(DEPDIR)/net_db.Po $(DEPDIR)/pconn.Po \
+@AMDEP_TRUE@ $(DEPDIR)/peer_digest.Po $(DEPDIR)/peer_select.Po \
+@AMDEP_TRUE@ $(DEPDIR)/pinger.Po $(DEPDIR)/redirect.Po \
+@AMDEP_TRUE@ $(DEPDIR)/referer.Po $(DEPDIR)/refresh.Po \
+@AMDEP_TRUE@ $(DEPDIR)/repl_modules.Po \
@AMDEP_TRUE@ $(DEPDIR)/send-announce.Po $(DEPDIR)/snmp_agent.Po \
@AMDEP_TRUE@ $(DEPDIR)/snmp_core.Po $(DEPDIR)/ssl.Po \
@AMDEP_TRUE@ $(DEPDIR)/ssl_support.Po $(DEPDIR)/stat.Po \
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/client_db.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/client_side.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/comm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/comm_kqueue.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/comm_poll.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/comm_select.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/debug.Po@am__quote@
--- /dev/null
+
+/*
+ * $Id: comm_kqueue.cc,v 1.1 2002/01/01 09:47:48 adrian Exp $
+ *
+ * DEBUG: section 5 Socket functions
+ *
+ * SQUID Web Proxy Cache http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ * Squid is the result of efforts by numerous individuals from
+ * the Internet community; see the CONTRIBUTORS file for full
+ * details. Many organizations have provided support for Squid's
+ * development; see the SPONSORS file for full details. Squid is
+ * Copyrighted (C) 2001 by the Regents of the University of
+ * California; see the COPYRIGHT file for full details. Squid
+ * incorporates software developed and/or copyrighted by other
+ * sources; see the CREDITS file for full details.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+/*
+ * This code was originally written by Benno Rice and hacked on quite
+ * a bit by Adrian. Adrian then took it to the hybrid-ircd project to use
+ * in their new IO subsystem. After a year of modifications and some
+ * rather interesting changes (event aggregation) its back in squid.
+ * Thanks to the ircd-hybrid guys.
+ */
+
+/*
+ * XXX Currently not implemented / supported by this module XXX
+ *
+ * - delay pools
+ * - deferred reads
+ *
+ * So, its not entirely useful in a production setup since if a read
+ * is meant to be deferred it isn't (we're not even throwing the event
+ * away here). Eventually the rest of the code will be rewritten
+ * so deferred reads aren't required.
+ * -- adrian
+ */
+
+#include "squid.h"
+
+#ifdef USE_KQUEUE
+
+#include <sys/event.h>
+
+
+#define KE_LENGTH 128
+
+/* jlemon goofed up and didn't add EV_SET until fbsd 4.3 */
+
+#ifndef EV_SET
+#define EV_SET(kevp, a, b, c, d, e, f) do { \
+ (kevp)->ident = (a); \
+ (kevp)->filter = (b); \
+ (kevp)->flags = (c); \
+ (kevp)->fflags = (d); \
+ (kevp)->data = (e); \
+ (kevp)->udata = (f); \
+} while(0)
+#endif
+
+static void kq_update_events(int, short, PF *);
+static int kq;
+static struct timespec zero_timespec;
+
+static struct kevent *kqlst; /* kevent buffer */
+static int kqmax; /* max structs to buffer */
+static int kqoff; /* offset into the buffer */
+
+
+/* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
+/* Private functions */
+
+void
+kq_update_events(int fd, short filter, PF * handler)
+{
+ PF *cur_handler;
+ int kep_flags;
+
+#if 0
+ int retval;
+#endif
+
+ switch (filter) {
+ case EVFILT_READ:
+ cur_handler = fd_table[fd].read_handler;
+ break;
+ case EVFILT_WRITE:
+ cur_handler = fd_table[fd].write_handler;
+ break;
+ default:
+ /* XXX bad! -- adrian */
+ return;
+ break;
+ }
+
+ if ((cur_handler == NULL && handler != NULL)
+ || (cur_handler != NULL && handler == NULL)) {
+ struct kevent *kep;
+
+ kep = kqlst + kqoff;
+
+ if (handler != NULL) {
+ kep_flags = (EV_ADD | EV_ONESHOT);
+ } else {
+ kep_flags = EV_DELETE;
+ }
+
+ EV_SET(kep, (uintptr_t) fd, filter, kep_flags, 0, 0, 0);
+
+ if (kqoff == kqmax) {
+ int ret;
+
+ ret = kevent(kq, kqlst, kqoff, NULL, 0, &zero_timespec);
+ /* jdc -- someone needs to do error checking... */
+ if (ret == -1) {
+ perror("kq_update_events(): kevent()");
+ return;
+ }
+ kqoff = 0;
+ } else {
+ kqoff++;
+ }
+#if 0
+ if (retval < 0) {
+ /* Error! */
+ if (ke.flags & EV_ERROR) {
+ errno = ke.data;
+ }
+ }
+#endif
+ }
+}
+
+
+
+/* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
+/* Public functions */
+
+
+/*
+ * comm_select_init
+ *
+ * This is a needed exported function which will be called to initialise
+ * the network loop code.
+ */
+void
+comm_select_init(void)
+{
+ kq = kqueue();
+ if (kq < 0) {
+ fatal("comm_select_init: Couldn't open kqueue fd!\n");
+ }
+ kqmax = getdtablesize();
+ kqlst = xmalloc(sizeof(*kqlst) * kqmax);
+ zero_timespec.tv_sec = 0;
+ zero_timespec.tv_nsec = 0;
+}
+
+/*
+ * comm_setselect
+ *
+ * This is a needed exported function which will be called to register
+ * and deregister interest in a pending IO state for a given FD.
+ */
+void
+commSetSelect(int fd, unsigned int type, PF * handler,
+ void *client_data, time_t timeout)
+{
+ fde *F = &fd_table[fd];
+ assert(fd >= 0);
+ assert(F->flags.open);
+
+ if (type & COMM_SELECT_READ) {
+ kq_update_events(fd, EVFILT_READ, handler);
+ F->read_handler = handler;
+ F->read_data = client_data;
+ }
+ if (type & COMM_SELECT_WRITE) {
+ kq_update_events(fd, EVFILT_WRITE, handler);
+ F->write_handler = handler;
+ F->write_data = client_data;
+ }
+ if (timeout)
+ F->timeout = squid_curtime + timeout;
+
+}
+
+/*
+ * Check all connections for new connections and input data that is to be
+ * processed. Also check for connections with data queued and whether we can
+ * write it out.
+ */
+
+/*
+ * comm_select
+ *
+ * Called to do the new-style IO, courtesy of of squid (like most of this
+ * new IO code). This routine handles the stuff we've hidden in
+ * comm_setselect and fd_table[] and calls callbacks for IO ready
+ * events.
+ */
+
+int
+comm_select(int msec)
+{
+ int num, i;
+ static struct kevent ke[KE_LENGTH];
+ struct timespec poll_time;
+
+ do {
+ /*
+ * remember we are doing NANOseconds here, not micro/milli. God knows
+ * why jlemon used a timespec, but hey, he wrote the interface, not I
+ * -- Adrian
+ */
+ poll_time.tv_sec = msec / 1000;
+ poll_time.tv_nsec = (msec % 1000) * 1000000;
+ for (;;) {
+ num = kevent(kq, kqlst, kqoff, ke, KE_LENGTH, &poll_time);
+ statCounter.select_loops++;
+ kqoff = 0;
+ if (num >= 0)
+ break;
+ if (ignoreErrno(errno))
+ break;
+ getCurrentTime();
+ return COMM_ERROR;
+ /* NOTREACHED */
+ }
+
+ getCurrentTime();
+ if (num == 0)
+ continue;
+
+ for (i = 0; i < num; i++) {
+ int fd = (int) ke[i].ident;
+ PF *hdl = NULL;
+ fde *F = &fd_table[fd];
+
+ if (ke[i].flags & EV_ERROR) {
+ errno = ke[i].data;
+ /* XXX error == bad! -- adrian */
+ continue; /* XXX! */
+ }
+ switch (ke[i].filter) {
+ case EVFILT_READ:
+ if ((hdl = F->read_handler) != NULL) {
+ F->read_handler = NULL;
+ hdl(fd, F->read_data);
+ }
+ case EVFILT_WRITE:
+ if ((hdl = F->write_handler) != NULL) {
+ F->write_handler = NULL;
+ hdl(fd, F->write_data);
+ }
+ default:
+ /* Bad! -- adrian */
+ break;
+ }
+ }
+ return COMM_OK;
+ }
+ while (0); /* XXX should rip this out! -- adrian */
+ /* XXX Get here, we broke! */
+ return 0;
+}
+
+#endif /* USE_KQUEUE */