int main(int argc, char *argv[]) { struct kreq req; struct kfcgi *fcgi; enum kcgi_err er; const char *pname; int rc, c, debug; if ((pname = strrchr(argv[0], '/')) == NULL) pname = argv[0]; else ++pname; debug = 0; while (-1 != (c = getopt(argc, argv, "d:"))) switch (c) { case ('d'): debug = atoi(optarg); break; default: return(EXIT_FAILURE); } if (KCGI_OK != khttp_fcgi_init(&fcgi, NULL, 0, NULL, 0, 0)) return(EXIT_FAILURE); for (rc = 0;;) { er = khttp_fcgi_parse(fcgi, &req); if (KCGI_HUP == er) { rc = 1; khttp_free(&req); break; } else if (KCGI_OK != er) { khttp_free(&req); break; } khttp_head(&req, kresps[KRESP_STATUS], "%s", khttps[KHTTP_200]); khttp_head(&req, kresps[KRESP_CONTENT_TYPE], "%s", kmimetypes[req.mime]); khttp_body(&req); khttp_puts(&req, "Hello, world!\n"); khttp_free(&req); if (debug > 0 && 0 == --debug) break; } khttp_fcgi_free(fcgi); return(rc ? EXIT_SUCCESS : EXIT_FAILURE); }
static int child(void) { struct kreq r; const char *page = "index"; if (KCGI_OK != khttp_parse(&r, NULL, 0, &page, 1, 0)) return(0); khttp_head(&r, kresps[KRESP_STATUS], "%s", khttps[KHTTP_200]); khttp_head(&r, kresps[KRESP_CONTENT_TYPE], "%s", kmimetypes[KMIME_TEXT_HTML]); if ( ! khttp_body(&r)) return(0); khttp_puts(&r, "1234567890"); khttp_free(&r); return(1); }