| Class | DRb::DRbUNIXSocket |
| In: |
lib/drb/unix.rb
|
| Parent: | DRbTCPSocket |
| Max_try | = | 10 | import from tempfile.rb |
# File lib/drb/unix.rb, line 56
56: def initialize(uri, soc, config={}, server_mode = false)
57: super(uri, soc, config)
58: set_sockopt(@socket)
59: @server_mode = server_mode
60: @acl = nil
61: end
# File lib/drb/unix.rb, line 21
21: def self.open(uri, config)
22: filename, option = parse_uri(uri)
23: filename.untaint
24: soc = UNIXSocket.open(filename)
25: self.new(uri, soc, config)
26: end
# File lib/drb/unix.rb, line 28
28: def self.open_server(uri, config)
29: filename, option = parse_uri(uri)
30: if filename.size == 0
31: soc = temp_server
32: filename = soc.path
33: uri = 'drbunix:' + soc.path
34: else
35: soc = UNIXServer.open(filename)
36: end
37: owner = config[:UNIXFileOwner]
38: group = config[:UNIXFileGroup]
39: if owner || group
40: require 'etc'
41: owner = Etc.getpwnam( owner ).uid if owner
42: group = Etc.getgrnam( group ).gid if group
43: File.chown owner, group, filename
44: end
45: mode = config[:UNIXFileMode]
46: File.chmod(mode, filename) if mode
47:
48: self.new(uri, soc, config, true)
49: end
# File lib/drb/unix.rb, line 10
10: def self.parse_uri(uri)
11: if /^drbunix:(.*?)(\?(.*))?$/ =~ uri
12: filename = $1
13: option = $3
14: [filename, option]
15: else
16: raise(DRbBadScheme, uri) unless uri =~ /^drbunix:/
17: raise(DRbBadURI, 'can\'t parse uri:' + uri)
18: end
19: end
# File lib/drb/unix.rb, line 51
51: def self.uri_option(uri, config)
52: filename, option = parse_uri(uri)
53: return "drbunix:#{filename}", option
54: end
# File lib/drb/unix.rb, line 66
66: def self.temp_server
67: tmpdir = Dir::tmpdir
68: n = 0
69: while true
70: begin
71: tmpname = sprintf('%s/druby%d.%d', tmpdir, $$, n)
72: lock = tmpname + '.lock'
73: unless File.exist?(tmpname) or File.exist?(lock)
74: Dir.mkdir(lock)
75: break
76: end
77: rescue
78: raise "cannot generate tempfile `%s'" % tmpname if n >= Max_try
79: #sleep(1)
80: end
81: n += 1
82: end
83: soc = UNIXServer.new(tmpname)
84: Dir.rmdir(lock)
85: soc
86: end
# File lib/drb/unix.rb, line 97
97: def accept
98: s = @socket.accept
99: self.class.new(nil, s, @config)
100: end
# File lib/drb/unix.rb, line 89
89: def close
90: return unless @socket
91: path = @socket.path if @server_mode
92: @socket.close
93: File.unlink(path) if @server_mode
94: @socket = nil
95: end