Em Fri, 4 Sep 2015 00:48:50 +0100 Federico Schwindt <[email protected]> escreveu:
> And a version aligned with phk's comment (off by default). > > On Fri, Sep 4, 2015 at 12:15 AM, Federico Schwindt <[email protected]> wrote: > > > Hi, > > > > Actually the problem is somewhere else. > > > > The attached diff should fix it. > > > > Cheers. > > With your diff varnish will spam log messages on systems without ACCEPT_FILTERS or TCP_DEFER_ACCEPT by default. I've modified my diff to kill some ifdefs and make accept_filter always avaliable, but this time disabled by default on system without ACCEPT_FILTERS or with TCP_DEFER_ACCEPT. With this: (1) anyone who wants to enable accept_filter on GNU/Linux should just call varnish with 'varnishd ... -p accept_filter=on'; (2) anyone who enables accept_filter on a system without it will have a log spam about not having support for this feature; (3) we get to keep the old behavior for systems with ACCEPT_FILTERS; diff --git bin/varnishd/cache/cache_acceptor.c bin/varnishd/cache/cache_acceptor.c index 9736ca9..a17351d 100644 --- bin/varnishd/cache/cache_acceptor.c +++ bin/varnishd/cache/cache_acceptor.c @@ -489,7 +489,6 @@ vca_acct(void *arg) assert (ls->sock > 0); // We know where stdin is AZ(listen(ls->sock, cache_param->listen_depth)); vca_tcp_opt_set(ls->sock, 1); -#ifdef HAVE_ACCEPT_FILTERS if (cache_param->accept_filter) { int i; i = VTCP_filter_http(ls->sock); @@ -498,7 +497,6 @@ vca_acct(void *arg) "Kernel filtering: sock=%d, ret=%d %s", ls->sock, i, strerror(errno)); } -#endif /* HAVE_ACCEPT_FILTERS */ } need_test = 1; diff --git configure.ac configure.ac index 6c4d5f2..4a50fd8 100644 --- configure.ac +++ configure.ac @@ -366,6 +366,19 @@ AC_CHECK_DECL([SO_ACCEPTFILTER], ] ) +AC_CHECK_DECL([TCP_DEFER_ACCEPT], + [ + AC_DEFINE(HAVE_ACCEPT_FILTERS,1,[Define to 1 if you have accept filters]), + AC_DEFINE(HAVE_TCP_DEFER_ACCEPT,1,[Define to 1 if you have TCP defer accept]) + ], + , + [ +#include <sys/socket.h> +#include <netinet/in.h> +#include <netinet/tcp.h> + ] +) + # Older Solaris versions define SO_{RCV,SND}TIMEO, but do not # implement them. # diff --git include/tbl/params.h include/tbl/params.h index d3a2982..6cbe3ba 100644 --- include/tbl/params.h +++ include/tbl/params.h @@ -30,13 +30,16 @@ /*lint -save -e525 -e539 */ -#ifdef HAVE_ACCEPT_FILTERS PARAM( /* name */ accept_filter, /* typ */ bool, /* min */ NULL, /* max */ NULL, +#if defined(HAVE_ACCEPT_FILTERS) && !defined(HAVE_TCP_DEFER_ACCEPT) /* default */ "on", +#else + /* default */ "off", +#endif /* HAVE_ACCEPT_FILTERS */ /* units */ "bool", /* flags */ MUST_RESTART, /* s-text */ @@ -44,7 +47,6 @@ PARAM( /* l-text */ NULL, /* func */ NULL ) -#endif /* HAVE_ACCEPT_FILTERS */ PARAM( /* name */ acceptor_sleep_decay, diff --git lib/libvarnish/vtcp.c lib/libvarnish/vtcp.c index 3992555..732c2ea 100644 --- lib/libvarnish/vtcp.c +++ lib/libvarnish/vtcp.c @@ -146,6 +146,7 @@ VTCP_hisname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen) /*--------------------------------------------------------------------*/ #ifdef HAVE_ACCEPT_FILTERS +#ifndef HAVE_TCP_DEFER_ACCEPT int VTCP_filter_http(int sock) @@ -160,7 +161,7 @@ VTCP_filter_http(int sock) return (retval); } -#elif defined(__linux) +#else /* HAVE_TCP_DEFER_ACCEPT */ int VTCP_filter_http(int sock) @@ -173,6 +174,7 @@ VTCP_filter_http(int sock) return (retval); } +#endif #else int _______________________________________________ varnish-dev mailing list [email protected] https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev
