On Tuesday, February 5, 2013 10:09:28 AM UTC+2, foobar...@gmail.com wrote: > Can someone help answer this? > > http://stackoverflow.com/questions/14698020/java-nio-server-and-python-asyncore-client > > > > Blocking python client works, asyncore doesn't work. >
There was return missing in writeable(). Modified code:: ---- import socket import select import asyncore class Connector(asyncore.dispatcher): def __init__(self, host, port): asyncore.dispatcher.__init__(self) self.debug = True self.buffer = bytes("hi","ascii") self.create_socket(socket.AF_INET,socket.SOCK_STREAM) print("Connector.connect(({},{}))".format(host,port)) self.connect((host, port)) def handle_connect(self): print("handle_connect()") # not called <------------------ def handle_read(self): print("handle_read()") self.recv(4096) self.close() def writable(self): print("writable()") return len(self.buffer) > 0 # remember RETURN def handle_write(self): print("handle_write()") sent = self.send(self.buffer) print("send({})".format(self.buffer[0:sent])) self.buffer = self.buffer[sent:] def handle_close(self): print("handle_close()") self.close() connector = Connector("localhost", 12000) # Handler() print("asyncore.loop() enter") asyncore.loop() print("asyncore.loop() leave") ---- BSD socket communication framework does not itself support connection indications on connection-oriented protocols, so asyncore "fakes" the indication by detecting if socket is writable. As the writable was false => no write event => no connection indication. asyncore usage and documentation is bad, so when using the module, read the source code to understand it's usage and functioning, or use other implementation eg. Tornado. -- http://mail.python.org/mailman/listinfo/python-list