-#!/usr/bin/env python
-import sys, getopt, socket, subprocess
+#!/bin/sh
+"""": # -*-python-*-
+bup_python="$(dirname "$0")/bup-python" || exit $?
+exec "$bup_python" "$0" ${1+"$@"}
+"""
+# end of bup preamble
+import sys, getopt, socket, subprocess, fcntl
from bup import options, path
from bup.helpers import *
af, socktype, proto, canonname, sa = res
try:
s = socket.socket(af, socktype, proto)
- except socket.error, e:
+ except socket.error as e:
continue
try:
if af == socket.AF_INET6:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(sa)
s.listen(1)
- except socket.error, e:
+ fcntl.fcntl(s.fileno(), fcntl.F_SETFD, fcntl.FD_CLOEXEC)
+ except socket.error as e:
s.close()
continue
socks.append(s)
[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)