How to check in CGI if client disconnected

V

Vishal

Hi,

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 :)

Regards,

-vishal.
 
G

Gabriel Genellina

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.
 
G

Gabriel Genellina

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.
 
V

Vishal

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.

Regards,

-vishal.
 
G

Graham Dumpleton

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)

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.
En Sun, 24 Aug 2008 17:51:36 -0300, Wojtek Walczak <[email protected]> escribió:
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.
 
V

Vishal

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.
 
G

Graham Dumpleton

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top