class Process::Daemon::Listen

Access incoming file descriptors from daemons started by systemd.

Constants

FD_START
LISTEN_FDNAMES
LISTEN_FDS
LISTEN_PID
SEPERATOR

Attributes

files[R]
named[R]
names[R]
unnamed[R]

Public Class Methods

file_descriptors(env = ENV) click to toggle source

Returns a Array or Hash of file descriptors. If LISTEN_FDNAMES is set, a Hash is returned which includes key => value pairs for named file descriptors.

# File lib/process/daemon/listen.rb, line 43
def self.file_descriptors(env = ENV)
        pid, fds, names = env.values_at(LISTEN_PID, LISTEN_FDS, LISTEN_FDNAMES)
        
        # Are the PIDs valid for this process?
        unless pid and Integer(pid) == Process.pid
                return nil
        end
        
        files = Integer(fds).times.collect do |i|
                self.open(FD_START + i)
        end
        
        if names
                names = names.split(SEPARATOR, -1)
        end
        
        self.new(files, names)
end
new(files, names) click to toggle source
# File lib/process/daemon/listen.rb, line 62
def initialize(files, names)
        @files = files
        @names = names
        
        @named = {}
        @unnamed = []
        
        @names.each_with_index do |name, index|
                if name
                        @named[name] = @files[index]
                else
                        @unnamed << @files[index]
                end
        end
end
open(fd) click to toggle source
# File lib/process/daemon/listen.rb, line 36
def self.open(fd)
        set_close_at_exec(fd)
        
        return IO.for_fd(fd)
end
set_close_at_exec(fd) click to toggle source
# File lib/process/daemon/listen.rb, line 32
def self.set_close_at_exec(fd)
        fd.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::F_SETFD
end