From: Claudio-Daniel Freire Date: Wed, 13 Apr 2011 14:10:24 +0000 (+0200) Subject: Ticket #24: transparent proxy/client reconnection X-Git-Tag: nepi_v2~160 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=2fcc37f2ede03f2fe74b10df4127fa058ee70c7a;p=nepi.git Ticket #24: transparent proxy/client reconnection --- diff --git a/src/nepi/util/server.py b/src/nepi/util/server.py index 60d28560..98f177f7 100644 --- a/src/nepi/util/server.py +++ b/src/nepi/util/server.py @@ -242,6 +242,18 @@ class Forwarder(object): class Client(object): def __init__(self, root_dir = ".", host = None, port = None, user = None, agent = None): + self.root_dir = root_dir + self.addr = (host, port) + self.user = user + self.agent = agent + self.connect() + + def connect(self): + root_dir = self.root_dir + (host, port) = self.addr + user = self.user + agent = self.agent + python_code = "from nepi.util import server;c=server.Forwarder(%r);\ c.forward()" % (root_dir,) if host != None: @@ -258,7 +270,17 @@ class Client(object): def send_msg(self, msg): encoded = base64.b64encode(msg) data = "%s\n" % encoded - self._process.stdin.write(data) + + try: + self._process.stdin.write(data) + except IOError: + # dead process, poll it to un-zombify + self._process.poll() + + # try again after reconnect + # If it fails again, though, give up + self.connect() + self._process.stdin.write(data) def send_stop(self): self.send_msg(STOP_MSG)