NAME
khttp_fcgi_init
,
khttp_fcgi_initx
—
initialise a FastCGI context for
kcgi
LIBRARY
library “libkcgi”
SYNOPSIS
#include
<sys/types.h>
#include <stdarg.h>
#include <stdint.h>
#include <kcgi.h>
enum kcgi_err
khttp_fcgi_init
(struct kfcgi
**fcgi, const struct kvalid *keys,
size_t keysz, const char *const
*pages, size_t pagesz, size_t
defpage);
enum kcgi_err
khttp_fcgi_initx
(struct kreq
**fcgi, const char *const *mimes,
size_t mimemax, const struct kvalid
*keys, size_t keysz, const
struct kmimemap *mimemap, size_t defmime,
const char *const *pages, size_t
pagesz, size_t defpage, void
*arg, void (*argfree)(void *arg),
unsigned int debugging, const struct
kopts *opts);
DESCRIPTION
The
khttp_fcgi_init
()
and
khttp_fcgi_initx
()
functions initialise a FastCGI context for kcgi(3). These functions will only work if invoked as FastCGI
servers, for example, kfcgi(8). They should be called as early as possible in the life-span
of a FastCGI application, preferably directly after initialisation.
The collective arguments are defined in khttp_parse(3). Function arguments are not copied: all pointers are passed by reference and used in later invocations of khttp_fcgi_parse(3).
The first form,
khttp_fgci_init
(),
is for applications using the system-recognised MIME types. This should work
well enough for most applications. It is equivalent to invoking the second
form,
khttp_fcgi_initx
(),
as follows:
khttp_fcgi_initx(fcgi, kmimetypes, KMIME__MAX, keys, keysz, ksuffixmap, KMIME_TEXT_HTML, pages, pagesz, defpage, NULL, NULL, 0, NULL);
After invocation with a return value of
KCGI_OK
, the fcgi pointer is
filled in (and must be later be freed with
khttp_fcgi_free(3)) and the
khttp_fcgi_parse(3) and khttp_fcgi_parsex(3) functions may be invoked.
Note:
in accordance with the FastCGI specification,
khttp_fcgi_init
()
and
khttp_fcgi_initx
()
will install signal handlers for SIGTERM
. These
should not be changed by the calling application, but are not prohibited
from doing so. The consequences are that a server wishing to halt the
application must use SIGKILL
instead of the
FastCGI-specified SIGTERM
and suffer the
consequences of not properly exiting the parse loop.
RETURN VALUES
khttp_fcgi_init
() and
khttp_fcgi_initx
() return an error code:
KCGI_OK
- Success (not an error).
KCGI_ENOMEM
- Memory failure. This can occur in many places: spawning a child, allocating memory, creating sockets, etc.
KCGI_ENFILE
- Could not allocate file descriptors.
KCGI_EAGAIN
- Could not spawn a child.
KCGI_SYSTEM
- Opaque operating system error.
KCGI_HUP
- Hangup: the function was not invoked in a FastCGI context.
On failure, the calling application should terminate as soon as possible.
SEE ALSO
kcgi(3), khttp_fcgi_free(3), khttp_fcgi_parse(3), khttp_parse(3)
AUTHORS
The khttp_fcgi_init
() and
khttp_fcgi_initx
() functions were written by
Kristaps Dzonsons
<kristaps@bsd.lv>.