2 import sys, getopt, socket, subprocess, fcntl
3 from bup import options, path
4 from bup.helpers import *
7 bup daemon [options...] -- [bup-server options...]
9 l,listen ip address to listen on, defaults to *
10 p,port port to listen on, defaults to 1982
12 o = options.Options(optspec, optfunc=getopt.getopt)
13 (opt, flags, extra) = o.parse(sys.argv[1:])
16 port = opt.port and int(opt.port) or 1982
23 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC,
24 socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
25 af, socktype, proto, canonname, sa = res
27 s = socket.socket(af, socktype, proto)
28 except socket.error, e:
31 if af == socket.AF_INET6:
32 log("bup daemon: listening on [%s]:%s\n" % sa[:2])
34 log("bup daemon: listening on %s:%s\n" % sa[:2])
35 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
38 fcntl.fcntl(s.fileno(), fcntl.F_SETFD, fcntl.FD_CLOEXEC)
39 except socket.error, e:
45 log('bup daemon: listen socket: %s\n' % e.args[1])
50 [rl,wl,xl] = select.select(socks, [], [], 60)
54 log("Socket accepted connection from %s\n" % (src,))
55 fd1 = os.dup(s.fileno())
56 fd2 = os.dup(s.fileno())
58 sp = subprocess.Popen([path.exe(), 'mux', '--', 'server']
59 + extra, stdin=fd1, stdout=fd2)
65 l.shutdown(socket.SHUT_RDWR)
68 debug1("bup daemon: done")