Asynchat and error handling
Orestis Markou
orestis at orestis.gr
Wed Nov 5 13:20:23 EST 2008
Hello,
I'm trying to add some better error handling to an async_chat client.
What I want is to retry or terminate gracefully if the connection to
the server doesn't succeed. Here's what I have:
import asyncore, asynchat, socket
class http_client(asynchat.async_chat):
def __init__(self, host):
asynchat.async_chat.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
terminator = '\x00\xDE\xED\xBE\xEF\x00'
self.buffer = 'I can haz data?' + terminator
self._connected = False
self.set_terminator(terminator)
self.connect( (host, 8080) )
def handle_connect(self):
print 'connected!'
def handle_expt(self):
if not self.connected:
print 'not connected'
self.close()
def collect_incoming_data (self, data):
print data
def found_terminator (self):
print 'terminator found, Closing'
self.close()
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
if __name__ == '__main__':
c = http_client('localhost')
asyncore.loop()
If the connection fails, handle_expt is called, and I can close the
client. However, I have no information from the error, so I can't
retry the connection. I would expect the call to "connect" to raise an
exception, but apparently it's swallowed somewhere. Is there any nice
way to do this?
Thanks!
--
orestis at orestis.gr
http://orestis.gr
More information about the Python-list
mailing list