From: nobu.nokada@... Date: 2003-09-25T10:50:59+09:00 Subject: Re: resolv-replace.rb bug? [WAS: When thread block] Hi, At Thu, 25 Sep 2003 09:24:45 +0900, Nathaniel Talbott wrote: > Is this intentional? > > irb(main):001:0> require 'socket' > => true > irb(main):002:0> TCPServer::new(55) > => # > irb(main):003:0> require 'resolv-replace' > => true > irb(main):004:0> TCPServer::new(55) > ArgumentError: wrong number of arguments(1 for 2) > from (irb):4:in `new' > from (irb):4 No, resolv-replace.rb seems not to be 1.8 compliant. > Because of this, using DRb with resolv-replace doesn't work very well. Any > idea as to what is wrong? Does this work? Index: lib/resolv-replace.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/resolv-replace.rb,v retrieving revision 1.1 diff -u -2 -p -r1.1 resolv-replace.rb --- lib/resolv-replace.rb 30 May 2001 09:10:26 -0000 1.1 +++ lib/resolv-replace.rb 25 Sep 2003 01:49:23 -0000 @@ -1,2 +1,3 @@ +require 'socket' require 'resolv' @@ -4,5 +5,5 @@ class BasicSocket alias original_resolv_send send def send(mesg, flags, *rest) - rest[0] = Resolv.getaddress(rest[0]).to_s if 0 < rest.length + rest[0] = Resolv.getaddress(rest[0]).to_s unless rest.empty? original_resolv_send(mesg, flags, *rest) end @@ -16,17 +17,18 @@ class << IPSocket end -class << TCPSocket - alias original_resolv_new new - def new(host, service) - original_resolv_new(Resolv.getaddress(host).to_s, service) - end - - alias original_resolv_open open - def open(host, service) - original_resolv_open(Resolv.getaddress(host).to_s, service) +class TCPSocket + alias original_resolv_initialize initialize + def initialize(host, serv, *rest) + rest[0] = Resolv.getaddress(rest[0]).to_s unless rest.empty? + original_resolv_initialize(Resolv.getaddress(host).to_s, serv, *rest) end end class UDPSocket + alias original_resolv_bind bind + def bind(host, port) + original_resolv_bind(Resolv.getaddress(host).to_s, port) + end + alias original_resolv_connect connect def connect(host, port) @@ -36,6 +38,13 @@ class UDPSocket alias original_resolv_send send def send(mesg, flags, *rest) - rest[0] = Resolv.getaddress(rest[0]).to_s if 0 < rest.length + rest[0] = Resolv.getaddress(rest[0]).to_s unless rest.empty? original_resolv_send(mesg, flags, *rest) end end + +class SOCKSSocket + alias original_resolv_initialize initialize + def initialize(host, serv) + original_resolv_initialize(Resolv.getaddress(host).to_s, port) + end +end if defined? SOCKSSocket -- Nobu Nakada