FastCGI and SIGPIPE
Andrej van der Zee <[email protected]>
| Newsgroups | gmane.comp.web.fastcgi.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi,
I am experiencing some problems with users aborting a request. When a
user closes the broswer, then my fast-cgi application never sees a
SIGPIPE. I wrote the small program below for testing but untill now I
have never seen a SIGPIPE.
Sombody?
Andrej
#include <stdlib.h>
#include <time.h>
#include <sys/wait.h>
#include <syslog.h>
#include <sys/time.h>
#include "fcgiapp.h"
#define SIGNAL(sig, x) \
do { \
struct sigaction sa; \
sa.sa_sigaction = x; \
sa.sa_flags = SA_SIGINFO; \
sigfillset(&sa.sa_mask); \
sigaction(sig, &sa, NULL); \
} while (0)
bool signal_raised = false;
static void handle_sigs(int sig, siginfo_t * si, void * context)
{
switch(sig)
{
case SIGUSR1:
case SIGTERM:
case SIGPIPE:
case SIGALRM:
signal_raised = true;
break;
default:
break;
}
}
int main(void)
{
int i,scale;
char* pathInfo;
FCGX_Stream *in, *out, *err;
FCGX_ParamArray envp;
SIGNAL(SIGPIPE, handle_sigs);
SIGNAL(SIGUSR1, handle_sigs);
SIGNAL(SIGTERM, handle_sigs);
SIGNAL(SIGALRM, handle_sigs);
while (!signal_raised && FCGX_Accept(&in, &out, &err, &envp) >= 0)
{
FCGX_FPrintF(out,"Content-type: text/html\r\n\r\n");
FCGX_FPrintF(out,"<h2>Going into while...</h2>");
FCGX_FFlush(out);
while (!signal_raised)
{
struct timeval begin;
gettimeofday(&begin, NULL);
int delta = 0;
while (delta < 10)
{
struct timeval end;
gettimeofday(&end, NULL);
delta = end.tv_sec - begin.tv_sec;
}
// keep connection alive by sending spaces
FCGX_FPrintF(out," ");
FCGX_FFlush(out);
}
syslog(LOG_ERR, "SIGNAL RAISED!");
}
return 0;
}
___________________________________
fastcgi-developers mailing list
http://fastcgi.com/fastcgi-developers/