Here's some pretty low level networking code I knocked up to encapsulate the actual sending and recieving. It runs in the main thread along with everything else so should be useful for anywhere without them or whatever. I hope somebody else might find it useful considering the amount of talk on here about networking. Oh yeah it's public domain I suppose, don't want anybody stopping others using it or something :p
<br><br>def recv_data(sock):<br>&nbsp;&nbsp;&nbsp; print &quot;receiving&quot;<br>&nbsp;&nbsp;&nbsp; sock.setblocking(0)<br>&nbsp;&nbsp;&nbsp; poller = select.poll()<br>&nbsp;&nbsp;&nbsp; poller.register(sock, select.POLLIN)<br>&nbsp;&nbsp;&nbsp; while True:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if poller.poll(0):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
sock.recv(1024)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stackless.schedule()<br><br>def send_data(sock, data):<br>&nbsp;&nbsp;&nbsp; sock.setblocking(0)<br>&nbsp;&nbsp;&nbsp; poller = select.poll()<br>&nbsp;&nbsp;&nbsp; poller.register(sock, select.POLLOUT)<br>&nbsp;&nbsp;&nbsp; while True:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if poller.poll
(0):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sent = sock.send(data)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if sent == len(data):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = data[sent:]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stackless.schedule()<br><br>Adam.<br>