summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-01 14:52:33 +0000
committerseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-01 14:52:33 +0000
commita6157194a63e8e254f94b4ee3b7c9184b34aa3fc (patch)
tree05f082fdf78db0aa1c2bac0858d5ab2b9b6be021
parent93f00244c51d48b6c18048d7ab4224eb01c8cb36 (diff)
Improving with multiple network interface.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@13801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--lib/drb/drb.rb15
-rw-r--r--test/drb/drbtest.rb2
3 files changed, 22 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 2853138979..57b7d73d30 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Thu Nov 1 23:47:43 2007 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb (DRbTCPSocket): Improving with multiple network
+ interface.
+
+ * test/drb/drbtest.rb: ditto.
+
Fri Oct 26 17:14:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* numeric.c (fix_pow): returns 1.0 for 0**0.0.
diff --git a/lib/drb/drb.rb b/lib/drb/drb.rb
index 25fbb3f788..2fa15445ef 100644
--- a/lib/drb/drb.rb
+++ b/lib/drb/drb.rb
@@ -858,6 +858,7 @@ module DRb
def self.open_server(uri, config)
uri = 'druby://:0' unless uri
host, port, opt = parse_uri(uri)
+ config = {:tcp_original_host => host}.update(config)
if host.size == 0
host = getservername
soc = open_server_inaddr_any(host, port)
@@ -865,6 +866,7 @@ module DRb
soc = TCPServer.open(host, port)
end
port = soc.addr[1] if port == 0
+ config[:tcp_port] = port
uri = "druby://#{host}:#{port}"
self.new(uri, soc, config)
end
@@ -945,7 +947,12 @@ module DRb
break if (@acl ? @acl.allow_socket?(s) : true)
s.close
end
- self.class.new(nil, s, @config)
+ if @config[:tcp_original_host].to_s.size == 0
+ uri = "druby://#{s.addr[3]}:#{@config[:tcp_port]}"
+ else
+ uri = @uri
+ end
+ self.class.new(uri, s, @config)
end
# Check to see if this connection is alive.
@@ -1666,6 +1673,12 @@ module DRb
#
# This is the URI of the current server. See #current_server.
def uri
+ drb = Thread.current['DRb']
+ client = (drb && drb['client'])
+ if client
+ uri = client.uri
+ return uri if uri
+ end
current_server.uri
end
module_function :uri
diff --git a/test/drb/drbtest.rb b/test/drb/drbtest.rb
index faf6c059d9..bc16ab1ca2 100644
--- a/test/drb/drbtest.rb
+++ b/test/drb/drbtest.rb
@@ -22,7 +22,7 @@ class DRbService
%w(ut_drb.rb ut_array.rb ut_port.rb ut_large.rb ut_safe1.rb ut_eval.rb).each do |nm|
add_service_command(nm)
end
- @server = @@server = DRb::DRbServer.new(nil, @@manager, {})
+ @server = @@server = DRb::DRbServer.new('druby://localhost:0', @@manager, {})
@@manager.uri = @@server.uri
def self.manager
@@manager