xref: /netbsd-src/share/man/man9/accf_http.9 (revision 404fbe5fb94ca1e054339640cabb2801ce52dd30)
1.\"
2.\" Copyright (c) 2000 Alfred Perlstein
3.\"
4.\" All rights reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\"    notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\"    notice, this list of conditions and the following disclaimer in the
13.\"    documentation and/or other materials provided with the distribution.
14.\"
15.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
16.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
19.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25.\"
26.\" $FreeBSD: src/share/man/man9/accf_http.9,v 1.11 2005/01/18 20:52:51 ru Exp $
27.\" "
28.Dd September 4, 2008
29.Os
30.Dt ACCF_HTTP 9
31.Sh NAME
32.Nm accf_http
33.Nd "buffer incoming connections until a certain complete HTTP requests arrive"
34.Sh SYNOPSIS
35.Cd "options INET"
36.Cd "pseudo-device accf_http"
37.Sh DESCRIPTION
38This is a filter to be placed on a socket that will be using
39.Fn accept
40to receive incoming HTTP connections.
41.Pp
42It prevents the application from receiving the connected descriptor via
43.Fn accept
44until either a full HTTP/1.0 or HTTP/1.1 HEAD or GET request has
45been buffered by the kernel.
46.Pp
47If something other than a HTTP/1.0 or
48HTTP/1.1 HEAD or GET request is received the kernel will
49allow the application to receive the connection descriptor
50via
51.Fn accept .
52.Pp
53The utility of
54.Nm
55is that a server will not have to context switch several times
56before performing the initial parsing of the request.
57This effectively reduces the amount of required CPU utilization
58to handle incoming requests by keeping active
59processes in preforking servers such as Apache low
60and reducing the size of the file descriptor set that needs
61to be managed by interfaces such as
62.Fn select ,
63.Fn poll
64or
65.Fn kevent
66based servers.
67.Sh EXAMPLES
68If the accf_data accept filter is present in the kernel configuration,
69this will enable the http accept filter
70on the socket
71.Fa sok .
72.Bd -literal -offset 0i
73	struct accept_filter_arg afa;
74
75	bzero(&afa, sizeof(afa));
76	strcpy(afa.af_name, "httpready");
77	setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));
78.Ed
79.Sh SEE ALSO
80.Xr setsockopt 2 ,
81.Xr accept_filter 9
82.Sh HISTORY
83The accept filter mechanism and the
84accf_http filter were introduced in
85.Fx 4.0 .
86They were ported to
87.Nx
88by Coyote Point Systems and appeared in
89.Nx 5.0 .
90.Sh AUTHORS
91This manual page and the filter were written by
92.An Alfred Perlstein .
93