Interesting apache 2.2 + accept filter problem
Doug Barton
dougb at FreeBSD.org
Wed May 25 06:00:55 UTC 2011
Howdy,
I have an odd one here, and I'm hoping to get some insight. I'm using
apache 2.2 (latest ports version) along with the accf_http kernel module
(which is loaded). If I start it the "normal" way, everything works just
fine. However if I start it with -D FOREGROUND then I get the following
error in httpd-error.log:
(22)Invalid argument: Failed to enable the 'httpready' Accept Filter
So I reduced everything down to a test case, and I can easily reproduce
it with nothing but a clean ports install (minus SSL, which doesn't make
a difference in the outcome, but simplified the ktrace).
I've run 'ktrace httpd' and 'ktrace httpd -D FOREGROUND' numerous times,
and there is one very clear difference. The first, which works, looks
like this:
48226 initial thread CALL
setsockopt(0x3,SOL_SOCKET,SO_REUSEADDR,0x7fffffffe80c,0x4)
48226 initial thread RET setsockopt 0
48226 initial thread CALL
setsockopt(0x3,SOL_SOCKET,SO_KEEPALIVE,0x7fffffffe80c,0x4)
48226 initial thread RET setsockopt 0
48226 initial thread CALL setsockopt(0x3,0x6,0x1,0x7fffffffe7ec,0x4)
48226 initial thread RET setsockopt 0
48226 initial thread CALL
setsockopt(0x3,SOL_SOCKET,SO_ACCEPTFILTER,0x7fffffffe6e0,0x100)
48226 initial thread RET setsockopt 0
The weird thing is that the second one, which produces the error, is
exactly the same, except that there is one extra call at the end, which
is the one that fails:
48208 initial thread CALL
setsockopt(0x3,SOL_SOCKET,SO_REUSEADDR,0x7fffffffe7ec,0x4)
48208 initial thread RET setsockopt 0
48208 initial thread CALL
setsockopt(0x3,SOL_SOCKET,SO_KEEPALIVE,0x7fffffffe7ec,0x4)
48208 initial thread RET setsockopt 0
48208 initial thread CALL setsockopt(0x3,0x6,0x1,0x7fffffffe7cc,0x4)
48208 initial thread RET setsockopt 0
48208 initial thread CALL
setsockopt(0x3,SOL_SOCKET,SO_ACCEPTFILTER,0x7fffffffe6c0,0x100)
48208 initial thread RET setsockopt 0
48208 initial thread CALL
setsockopt(0x3,SOL_SOCKET,SO_ACCEPTFILTER,0x7fffffffe6c0,0x100)
48208 initial thread RET setsockopt -1 errno 22 Invalid argument
I cannot figure out what it is about running in the foreground that is
causing that last call, and I've run out of things to test or try, so
I'm asking for help. Any ideas?
BTW, not sure it matters but the the reason that I want to add -D
FOREGROUND is for use with daemontools. However I've managed to isolate
the error to just 'httpd -D FOREGROUND' on the command line without
anything else involved.
Thanks,
Doug
--
Nothin' ever doesn't change, but nothin' changes much.
-- OK Go
Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price. :) http://SupersetSolutions.com/
More information about the freebsd-apache
mailing list