The essence of the solution I chose was to raise an AbortResponse exception. I derived AbortResponse from EndResponse and then had to put a couple of other catches in Application.py as I recall in case the servlet did not catch it.
Are you using 0.8.1 or the CVS version? I have not yet applied my fix to the CVS trunk version of the code yet, but I could probably do that in the near future if you are interested. I have been meaning to upgrade to the latest changes in CVS anyway.
-Stuart -
Dietmar Schwertberger wrote:
In <URL:news:local.News> on Wed 03 Sep, [EMAIL PROTECTED] wrote:
--> Tuesday, September 2, 2003, 4:31:26 PM, [EMAIL PROTECTED] wrote:
In <URL:news:local.News> on Tue 02 Sep, Ian Bicking wrote:
I thought that 'StreamOut Error' is a message from mod_python which is just
printed to stderr. But then there's the post from Matt/Geoff suggesting this
is an OS problem.
If Webware doesn't have a timeout as Ian mentioned, then the 'Software cause connection abort' message being seen seems to make sense when Apache reaches its Timeout limit and kills the connection, at which point Webware is probably confused and Python is reporting the error.
Has either of you just tried setting the Apache Timeout directive very high?
The problem ist surely not timeout related as it immediately happens after cancelling the transfer.
From the sources of NewThreadedAppServer.py:
from WebKit.ASStreamOut import ASStreamOut class TASASStreamOut(ASStreamOut):
def __init__(self, sock): ASStreamOut.__init__(self) self._socket = sock
def flush(self): debug=0 result = ASStreamOut.flush(self) if result: ##a true return value means we can send reslen = len(self._buffer) sent = 0 while sent < reslen: try: sent = sent + self._socket.send(self._buffer[sent:sent+8192]) except socket.error, e: if e[0]==errno.EPIPE: #broken pipe pass else: print "StreamOut Error: ", e break self.pop(sent)
This just ignores the socket.error. I think it would be a good idea to give the application a possibility to find out about the error state, e.g. through setting an error flag or a return value.
I'm not sure about the errno.EPIPE, but if the pipe is broken, what sense does it make to re-try sending more data?
Regards,
Dietmar
------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Webware-discuss mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/webware-discuss
------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Webware-discuss mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/webware-discuss