>From your repro, I see no evidence of a TaskletExit: es@duna:~/burrotron$ sp test-socket.py sls um- connected? es@duna:~/burrotron$
The fact that you print "um- connected?" indicates insead that connect() returned _without_ an exception. So, there are a few things that can be failing: 1) the blocking connect() call (done after the select()) call isn't failing so there is no exception being raised 2) The exception is being sent to the target socket using tasklet.send_exception() but is not being raised on the receiving side 3) The exception is being handled somewhere on the receiving side. My money is on 1. I think that this is simply a case of not detection the connection failure properly on unix. K -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Estevo Sent: Sunday, January 09, 2011 13:50 To: [email protected] Subject: [Stackless] stacklesssocket exception swallowing (was: Buglet in libevent stackless socket). >> By the way, the reason why I checked out this version of the >> stackless socket >> was because the standard one wasn't reporting any socket exceptions to me. >> Instead it would exit silently (raising TaskletExit, which is not >> normally >> reported) if, for example, if the server refused my connection. This >> is in Python 2.6. If this is not a known issue, I'll write a more >> detailed reproduction description. > > When did you last try it? > > European Service Network kindly sponsored me to do some work on it > late last year, and it now passes the Python 2.7 unit test suite. > And there have been further fixes in the last week based on its use > here at C.C.P., including fixes related to exception swallowing. I tried again downloading (what I believe to be) last stackless socket from here: http://stacklessexamples.googlecode.com/svn/trunk/examples/networking/stacklesssocket.py and the libevent version from here: http://stacklessexamples.googlecode.com/svn/trunk/examples/networking/socketlibevent.py I wrote this little test script: --- BEGIN test-socket.py import sys import stackless def connect(): if sys.argv[1] == 'sls': import stacklesssocket stacklesssocket.install() elif sys.argv[1] == 'lev': import socketlibevent sys.modules['socket'] = socketlibevent else: assert sys.argv[1] == 'std' import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1', 6789)) print "um- connected?" stackless.tasklet(connect)() stackless.run() --- END test-socket.py My computer is accepting no connections on port 6789. This is just to test a connection refused error. This is the banner of my stackless python installation, which I invoke as sp: Python 2.6.4 Stackless 3.1b3 060516 (python-2.64:78555M, May 3 2010, 18:33:09) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> As you see, it's Python 2.6, not 2.7. This is my test of the unpatched module: es@duna:~/burrotron$ sp test-socket.py std Traceback (most recent call last): File "test-socket.py", line 19, in <module> stackless.run() File "test-socket.py", line 15, in connect s.connect(('127.0.0.1', 6789)) File "<string>", line 1, in connect socket.error: [Errno 111] Connection refused This is my test of the libevent-based stackless socket: es@duna:~/burrotron$ sp test-socket.py lev Traceback (most recent call last): File "test-socket.py", line 19, in <module> stackless.run() File "test-socket.py", line 15, in connect s.connect(('127.0.0.1', 6789)) File "/home/es/burrotron/socketlibevent.py", line 160, in connect return self.sock.connect(address) File "<string>", line 1, in connect socket.error: [Errno 111] Connection refused This is my run using the standard stacklesssocket.py: es@duna:~/burrotron$ sp test-socket.py sls um- connected? es@duna:~/burrotron$ _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless
