)
to receive incoming HTTP connections.
It prevents the application from receiving the connected descriptor via
accept()
until either a full HTTP/1.0 or HTTP/1.1 HEAD or GET request has
been buffered by the kernel.
If something other than a HTTP/1.0 or
HTTP/1.1 HEAD or GET request is received the kernel will
allow the application to receive the connection descriptor
via
accept().
The utility of
accf_http
is that a server will not have to context switch several times
before performing the initial parsing of the request.
This effectively reduces the amount of required CPU utilization
to handle incoming requests by keeping active
processes in preforking servers such as Apache low
and reducing the size of the file descriptor set that needs
to be managed by interfaces such as
select(),
poll(
)
or
kevent(
)
based servers.
sok
.
struct accept_filter_arg afa;
bzero(&afa, sizeof(afa));
strcpy(afa.af_name, "httpready");
setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));