diff --git a/fcgiwrap.8 b/fcgiwrap.8 index bf02c26..892b594 100644 --- a/fcgiwrap.8 +++ b/fcgiwrap.8 @@ -71,6 +71,10 @@ FCGI_CHDIR By default fcgiwrap changes to the directory containing the CGI script before executing it (per CGI spec). You may override this behaviour by passing FCGI_CHDIR containing the script's expected working directory or \- to skip the directory change completely. +.RE +NO_BUFFERING +.RS +When set (e.g., to ""), disables output buffering. .SH EXAMPLE The fastest way to see \fBfcgiwrap\fP do something is to launch it at the command line diff --git a/fcgiwrap.c b/fcgiwrap.c index b44d8aa..42e3ec9 100644 --- a/fcgiwrap.c +++ b/fcgiwrap.c @@ -191,6 +191,7 @@ struct fcgi_context { int fd_stderr; unsigned int reply_state; pid_t cgi_pid; + int unbuffered; }; static void fcgi_finish(struct fcgi_context *fc, const char* msg) @@ -256,6 +257,10 @@ static const char * fcgi_pass_fd(struct fcgi_context *fc, int *fdp, FCGI_FILE *f return "writing CGI reply"; } } + + if (fc->unbuffered && FCGI_fflush(ffp)) { + return "flushing CGI reply"; + } } else { if (nread < 0) { return "reading CGI reply"; @@ -590,6 +595,7 @@ static void handle_fcgi_request(void) fc.fd_stderr = pipe_err[0]; fc.reply_state = REPLY_STATE_INIT; fc.cgi_pid = pid; + fc.unbuffered = !!getenv("NO_BUFFERING"); fcgi_pass(&fc); }