2 # -*- coding: utf-8 -*-
11 CTRL_SOCK = "ctrl.sock"
12 STD_ERR = "stderr.log"
35 # Decouple from parent environment.
45 # close all open file descriptors.
46 for fd in range(0, MAX_FD):
52 # Redirect standard file descriptors.
53 stdout = stderr = file(STD_ERR, "a", 0)
54 stdin = open('/dev/null', 'r')
55 os.dup2(stdin.fileno(), sys.stdin.fileno())
56 os.dup2(stdout.fileno(), sys.stdout.fileno())
57 os.dup2(stderr.fileno(), sys.stderr.fileno())
61 self.ctrl_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
62 self.ctrl_sock.bind(CTRL_SOCK)
63 self.ctrl_sock.listen(0)
66 conn, addr = self.ctrl_sock.accept()
71 data = conn.recv(1024)
72 except socket.timeout, e:
79 conn.send("%s received" % data)
83 self.ctrl_sock.close()
89 class Forwarder(object):
96 msg = sys.stdin.readline()
98 reply = self.ctrl_sock.recv(1024)
99 sys.stdout.write(reply)
103 self.ctrl_sock.send(msg)
105 if e.errno == errno.EPIPE:
107 self.ctrl_sock.send(msg)
113 self.ctrl_sock.close()
116 self.ctrl_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
117 self.ctrl_sock.connect(CTRL_SOCK)
121 # s = subprocess.Popen(['python' ,'-c' 'import server;c=server.Forwarder();c.forward()'], stdin = subprocess.PIPE)
122 # s.stdin.write('aaaa\n')