Hi,
At Thu, 25 Sep 2003 09:24:45 +0900,
Nathaniel said:
Is this intentional?
irb(main):001:0> require 'socket'
=> true
irb(main):002:0> TCPServer::new(55)
=> #<TCPServer:0x2b9ef50>
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