X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fdaemon-cmd.py;h=ba4b86a50f8917bf697e2a45864cfecb8ddb97ba;hb=57368bb37dae3047d737892f7b4d1c6ac725bc53;hp=0b274f71e4a75cae9f2ecdd23da2e935ceea979e;hpb=9cdca01be1c6334675a4fbecd3d1d03151323f5e;p=bup.git diff --git a/cmd/daemon-cmd.py b/cmd/daemon-cmd.py index 0b274f7..ba4b86a 100755 --- a/cmd/daemon-cmd.py +++ b/cmd/daemon-cmd.py @@ -1,5 +1,12 @@ -#!/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 + +from __future__ import absolute_import +import sys, getopt, socket, subprocess, fcntl from bup import options, path from bup.helpers import * @@ -25,16 +32,18 @@ for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, 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: log("bup daemon: listening on [%s]:%s\n" % sa[:2]) else: log("bup daemon: listening on %s:%s\n" % sa[:2]) + 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) @@ -48,10 +57,17 @@ try: [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)