#!/usr/bin/env python
-import sys, getopt, socket, subprocess
+import sys, getopt, socket, subprocess, fcntl
from bup import options, path
from bup.helpers import *
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(sa)
s.listen(1)
+ fcntl.fcntl(s.fileno(), fcntl.F_SETFD, fcntl.FD_CLOEXEC)
except socket.error, e:
s.close()
continue
[rl,wl,xl] = select.select(socks, [], [], 60)
for l in rl:
s, src = l.accept()
- log("Socket accepted connection from %s\n" % (src,))
- sp = subprocess.Popen([path.exe(), 'mux', '--', 'server'] + extra,
- stdin=os.dup(s.fileno()), stdout=os.dup(s.fileno()))
- s.close()
+ try:
+ log("Socket accepted connection from %s\n" % (src,))
+ fd1 = os.dup(s.fileno())
+ fd2 = os.dup(s.fileno())
+ s.close()
+ sp = subprocess.Popen([path.exe(), 'mux', '--',
+ path.exe(), 'server']
+ + extra, stdin=fd1, stdout=fd2)
+ finally:
+ os.close(fd1)
+ os.close(fd2)
finally:
for l in socks:
l.shutdown(socket.SHUT_RDWR)