How to check in CGI if client disconnected

Graham Dumpleton Graham.Dumpleton at gmail.com
Mon Aug 25 02:44:54 EDT 2008


On Aug 25, 4:26 pm, Vishal <vrs... at gmail.com> wrote:
> Hi,
>
>   Thanks for the replies. In my case, the cgi is sending a large file
> to the client. In case the the stop button is pressed on the browser
> to cancel the download, i want to do some cleanup action. It's all one-
> way transfer in this case, so i can't expect the client to send
> anything to me. I read somewhere that apache sends the SIGTERM signal
> to a cgi when the client disconnects. However, my cgi is not getting
> the signal - is there a way to have the cgi catch and handle the
> SIGTERM?
>
> I tried using the signal module
>
> ---
> def sigtermHandler(signum, frame):
>     # do some cleanup
>
> signal.signal(signal.SIGTERM, sigtermHandler)
>
> ---
>
> But even this doesn't work.

Have you considered simply checking to see if the amount of POST
content read matches the inbound Content-Length specified in the CGI
environment. If your processing of POST content finds less than what
was meant to be sent, then likely that the client browser aborted
request before all content could be sent.

Graham

> Regards,
>
> -vishal.
> On Aug 25, 2:58 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
> wrote:
>
> > En Sun, 24 Aug 2008 17:51:36 -0300, Wojtek Walczak <gmin... at bzt.bzt> escribió:
>
> > > On Sun, 24 Aug 2008 17:21:52 -0300, Gabriel Genellina wrote:
> > >>>    I am writing a CGI to serve files to the caller. I was wondering if
> > >>> there is any way to tell in my CGI if the client browser is still
> > >>> connected. If it is not, i want to execute some special code before
> > >>> exiting.
>
> > >>>    Is there any way to do this? Any help on this is appreciated :)
>
> > >> I don't think so. A CGI script runs once per request, and exits. The server may find that client disconnected, but that may happen after the script finished.
>
> > > I am not a web developer, but I think that the only way is to
> > > set a timeout on server side. You can't be sure that the client
> > > disconnected, but you can stop CGI script if there's no
> > > action on client side for too long.
>
> > Which kind of client action? Every link clicked or form submitted generates a different request that triggers a CGI script; the script starts, reads its parameters, do its task, and exits. There is no "long running process" in CGI - the whole "world" must be recreated on each request (a total waste of resources, sure).
>
> > If processing takes so much time, it's better to assign it a "ticket" - the user may come back later and see if its "ticket" has been finished, or the system may send an email telling him.
>
> > --
> > Gabriel Genellina




More information about the Python-list mailing list