AFAIK, there is no way to "kill" a thread. On top of that, there is no way to know if a browser "stop" actually means "stop processing" (for example in the case of a long-running method, a browser stop might just mean "I went to another web page, I'll be back, continue running"). This is handled in ASP by requiring the programmer to insert stuff like: if REQUEST.isConnectionClosed: return else: continue processing. This might be a reasonable thing to add. - C ----- Original Message ----- From: "Oliver Bleutgen" <myzope@gmx.net> To: <zope-dev@zope.org> Sent: Friday, August 23, 2002 5:06 PM Subject: [Zope-dev] Handling of ECONNRESET socket error in asyncore.py
It just thought about the fact that zope on linux seemingly does ignore when the user presses of the stop on his browser. I.e., if you access a e.g. long running python(script) and press "Stop" on the browser and you'll see the thread which runs the script is still working. Extremely ugly IMO.
Well, it also happens on win. I just looked at asyncore.dispatcher, and there's the recv() method:
def recv (self, buffer_size): try: ... except socket.error, why: # winsock sometimes throws ENOTCONN if why[0] in [ECONNRESET, ENOTCONN, ESHUTDOWN]: self.handle_close() return '' else: raise socket.error, why
The browser closes the connection when the Stop button is pressed, that means that the recieving end gets a RST, and that seems to throw a socket.error, with why[0] == ECONNRESET. Well, I know jack about the python socket class, but a strategical placed "print" tells more than a thousand words ;-).
handle_close() doesn't also do much, just logs and closes the connection. So, the poor thread never does never find out about the fact that all his work is for nothing, and happily continues.
Can't this be fixed anyhow?
cheers, oliver
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )