How to check in CGI if client disconnected

Vishal vrshah at gmail.com
Mon Aug 25 09:49:21 CEST 2008


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.

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