How to check in CGI if client disconnected

Graham Dumpleton Graham.Dumpleton at gmail.com
Mon Aug 25 07:31:44 EDT 2008


On Aug 25, 5:49 pm, Vishal <vrs... at gmail.com> wrote:
> Hi Graham,
>
>    Thanks for the reply. In my case, it's the other way round. I need
> to check if the amount of data sent is equal to the file size i want
> to send. However, the question is - when do i check this? Currently, i
> am unable to call any cleanup code before exit.

Best you will do for writing, is to catch exceptions around the call
outputing the data. If an exception occurs then a problem has
obviously occurred.

Graham

> Regards,
>
> -vishal.
>
> On Aug 25, 11:44 am, Graham Dumpleton <Graham.Dumple... at gmail.com>
> wrote:
>
> > 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