Sha256: 518d2a34f1e29055f196ec70cc399ee93991a78a45ee6eb74bcc91eae3999574
Contents?: true
Size: 1.07 KB
Versions: 3
Compression:
Stored size: 1.07 KB
Contents
module Einhorn module Compat # In Ruby 2.1.0 (and possibly earlier), IO.pipe sets cloexec on # the descriptors. def self.pipe readable, writeable = IO.pipe cloexec!(readable, false) cloexec!(writeable, false) [readable, writeable] end def self.cloexec!(fd, enable) original = fd.fcntl(Fcntl::F_GETFD) if enable new = original | Fcntl::FD_CLOEXEC else new = original & (-Fcntl::FD_CLOEXEC-1) end fd.fcntl(Fcntl::F_SETFD, new) end def self.cloexec?(fd) fd.fcntl(Fcntl::F_GETFD) & Fcntl::FD_CLOEXEC end # Opts are ignored in Ruby 1.8 def self.exec(script, args, opts={}) cmd = [script, script] begin Kernel.exec(cmd, *(args + [opts])) rescue TypeError Kernel.exec(cmd, *args) end end def self.unixserver_new(path) server = UNIXServer.new(path) cloexec!(server, false) server end def self.accept_nonblock(server) sock = server.accept_nonblock cloexec!(sock, false) sock end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
einhorn-0.5.4 | lib/einhorn/compat.rb |
einhorn-0.5.3 | lib/einhorn/compat.rb |
einhorn-0.5.2 | lib/einhorn/compat.rb |