1 # -*- coding: utf-8 -*-
2 # vim:ts=4:sw=4:et:ai:sts=4
10 CTRL_SOCK = "ctrl.sock"
11 STD_ERR = "stderr.log"
34 # Decouple from parent environment.
44 # close all open file descriptors.
45 for fd in range(0, MAX_FD):
51 # Redirect standard file descriptors.
52 stdout = stderr = file(STD_ERR, "a", 0)
53 stdin = open('/dev/null', 'r')
54 os.dup2(stdin.fileno(), sys.stdin.fileno())
55 os.dup2(stdout.fileno(), sys.stdout.fileno())
56 os.dup2(stderr.fileno(), sys.stderr.fileno())
60 self.ctrl_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
61 self.ctrl_sock.bind(CTRL_SOCK)
62 self.ctrl_sock.listen(0)
65 conn, addr = self.ctrl_sock.accept()
70 data = conn.recv(1024)
71 except socket.timeout, e:
78 conn.send("%s received" % data)
82 self.ctrl_sock.close()
88 class Forwarder(object):
95 msg = sys.stdin.readline()
97 reply = self.ctrl_sock.recv(1024)
98 sys.stdout.write(reply)
102 self.ctrl_sock.send(msg)
104 if e.errno == errno.EPIPE:
106 self.ctrl_sock.send(msg)
112 self.ctrl_sock.close()
115 self.ctrl_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
116 self.ctrl_sock.connect(CTRL_SOCK)
120 # s = subprocess.Popen(['python' ,'-c' 'import server;c=server.Forwarder();c.forward()'], stdin = subprocess.PIPE)
121 # s.stdin.write('aaaa\n')