NAME
accf_http —
buffer incoming connections
until a certain complete HTTP requests arrive
SYNOPSIS
options INET
pseudo-device accf_http
DESCRIPTION
This is a filter to be placed on a socket that will be using
accept() to receive incoming HTTP connections.
Once installed on a listening socket, this filter is activated when a connection
becomes ready to receive data (at which point
accept(2) would usually return
the connected descriptor to the application). The filter prevents the
descriptor from being returned immediately to the application via
accept(2). The descriptor is
made available to the application via
accept(2) only when one of the
following conditions is met:
- A complete, syntactically valid HTTP/1.0 or HTTP/1.1 HEAD
or GET request has been buffered by the kernel.
- The data buffered by the kernel cannot be part of a
complete, syntactically valid HTTP 1.0 or HTTP/1.1 HEAD or GET
request.
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.
EXAMPLES
If the accf_data accept filter is present in the kernel configuration, this will
enable the http accept filter on the socket
sok.
struct accept_filter_arg afa;
bzero(&afa, sizeof(afa));
strcpy(afa.af_name, "httpready");
setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));
SEE ALSO
setsockopt(2),
accept_filter(9)
HISTORY
The accept filter mechanism and the
accf_http filter were
introduced in
FreeBSD 4.0. They were ported to
NetBSD by Coyote Point Systems and appeared in
NetBSD 5.0.
AUTHORS
This manual page and the filter were written by
Alfred
Perlstein.