On Tuesday, February 5, 2013 10:09:28 AM UTC+2, [email protected] 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