Hi,<br><br>I'm a new subscriber to this list although I have looked through the mail archives many times over the last few months to find answers to my questions.<br><br>I've recently written a server using stackless and the socket module.  It was a bit tricky because socket.recv calls are blocking.  So, I created a "socket thread" that sucked messages from a socket and then used channels to send the messages to "worker tasklets" running on a different thread.  That way, the "worker tasklets" could run while the "socket thread" was blocked in socket.recv.<br>

<br>I recently discovered stacklesslib and learned that it has a replacement for sockets that works well with stackless.  I've tried modifying my server to use sockets from stacklesslib.  Unfortunately, my server goes into the socket.accept method but it never returns. The documentation for stacklesslib is pretty sparse.  I've looked for tutorials on the web and I haven't found anything.  So, I have no idea what I'm doing wrong<br>

<br>Client and server programs are below.  s.py is a server.  c.py is a client.  The code is based on section 17.2 in The Python Standard Library.  First, I run s.py:<br><br>C:\tmp\remote>s.py<br>Accepting connections<br>

<br>Then, I run c.py in a different console window.  s.py should then print a "Connected by" message.  But, nothing happens.  If I modify s.py to avoid the stackless and stacklesslib stuff by setting GO_STACKLESS = False, it all works correctly. <br>

<br>I'd be very grateful if someone can tell me what I'm doing wrong or point me to some tutorials that I've overlooked.  I'm using stacklesslib 1.0.3 and stackless version:<br><br>Python 2.7.1 Stackless 3.1b3 060516 (release27-maint, Jan  1 2011, 13:04:37) [MSC v.1500 32 bit (Intel)] on win32<br>

<br>   <br><span style="font-family:courier new,monospace"># s.py - This is a server based on the code from the The Python</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"># Standard Library manual section 17.2  </span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"># To use stackless and sockets from stacklesslib set GO_STACKLESS to</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"># True.  To run the server using standard Python sockets, set</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace"># GO_STACKLESS to False.</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">GO_STACKLESS = True</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace"># Echo server program</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">if GO_STACKLESS:</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    import stackless</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    import stacklesslib.monkeypatch</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    stacklesslib.monkeypatch.patch_all()</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">import socket</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">def do_server():</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    HOST = ''                 # Symbolic name meaning all available interfaces</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    PORT = 50007              # Arbitrary non-privileged port</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    s.bind((HOST, PORT))</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    s.listen(1)</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    print "Accepting connections"</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    conn, addr = s.accept()</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    print 'Connected by', addr</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    while 1:</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">        data = conn.recv(1024)</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">        if not data: break</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">        conn.send(data)</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    conn.close()</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">if GO_STACKLESS:</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    stackless.tasklet(do_server)()</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    app = stacklesslib.main.MainLoop()</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    app.run()</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">else:</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    do_server()</span><br><span style="font-family:courier new,monospace">------------------------------------------------------------</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"># c.py - This is a server based on the code from the The Python</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"># Standard Library manual section 17.2.  It connects to s.py, send</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace"># 'Hello, world' then echos a response.</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"># Echo client program</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">import socket</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">HOST = '127.0.0.1'    # The remote host</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">PORT = 50007              # The same port as used by the server</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">s.connect((HOST, PORT))</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">s.send('Hello, world')</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">data = s.recv(1024)</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">s.close()</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">print 'Received', repr(data)</span><br style="font-family:courier new,monospace"><br>