def unix_listener_stats(paths = nil)
rv = Hash.new { |h,k| h[k.freeze] = Raindrops::ListenStats.new(0, 0) }
if nil == paths
paths = [ '[^\n]+' ]
else
paths = paths.map do |path|
path = path.dup
path.force_encoding(Encoding::BINARY) if defined?(Encoding)
if File.symlink?(path)
link = path
path = Pathname.new(link).realpath.to_s
rv[link] = rv[path]
else
rv[path]
end
Regexp.escape(path)
end
end
paths = /^\w+: \d+ \d+ (\d+) \d+ (\d+)\s+\d+ (#{paths.join('|')})$/n
File.read(*PROC_NET_UNIX_ARGS).scan(paths) do |s|
path = s[-1]
case s[0]
when "00000000"
case s[1].to_i
when 2 then rv[path].queued += 1
when 3 then rv[path].active += 1
end
else
rv[path]
end
end
rv
end