def mount_fuse(mount_point): rfd, sfd = socketpair(AF_UNIX, SOCK_STREAM) newenv = os.environ.copy() if not os.fork(): os.environ['_FUSE_COMMFD'] = str(sfd) for i in xrange(3, 1024): if i != sfd: try: os.close(i) except OSError: pass os.execl('/usr/bin/fusermount', 'fusermount', mount_point) else: #s = socket.fromfd(rfd, AF_UNIX, SOCK_STREAM) message, flags, ancillary = recvmsg(rfd) level, type, fd = ancillary[0] return unpack('=i', fd)[0]
import socket, os, errno from eunuchs.socketpair import socketpair # set things up so the fds we get are deterministic for fd in xrange(3,100): try: os.close(fd) except OSError, e: if e.errno == errno.EBADF: # wasn't open pass else: raise a,b = socketpair() assert a == 3 assert b == 4 a,b = socketpair() assert a == 5 assert b == 6 a,b = socketpair(socket.AF_UNIX) assert a == 7 assert b == 8 a,b = socketpair(socket.AF_UNIX, socket.SOCK_STREAM) assert a == 9 assert b == 10