summaryrefslogtreecommitdiff
path: root/ruby_1_8_6/lib/resolv-replace.rb
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-07 07:36:34 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-07 07:36:34 +0000
commit441546edcfbb1b346c87b69c5f578d1a0e522e06 (patch)
tree04f606a008baebc445f38944ad37e87468da29ea /ruby_1_8_6/lib/resolv-replace.rb
parentfa93611c0f9a6db146341c792bfe3b7322ec00e2 (diff)
add tag v1_8_6_269
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_6_269@17937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_1_8_6/lib/resolv-replace.rb')
-rw-r--r--ruby_1_8_6/lib/resolv-replace.rb62
1 files changed, 62 insertions, 0 deletions
diff --git a/ruby_1_8_6/lib/resolv-replace.rb b/ruby_1_8_6/lib/resolv-replace.rb
new file mode 100644
index 0000000000..5d15b4577c
--- /dev/null
+++ b/ruby_1_8_6/lib/resolv-replace.rb
@@ -0,0 +1,62 @@
+require 'socket'
+require 'resolv'
+
+class << IPSocket
+ alias original_resolv_getaddress getaddress
+ def getaddress(host)
+ begin
+ return Resolv.getaddress(host).to_s
+ rescue Resolv::ResolvError
+ raise SocketError, "Hostname not known: #{host}"
+ end
+ end
+end
+
+class TCPSocket
+ alias original_resolv_initialize initialize
+ def initialize(host, serv, *rest)
+ rest[0] = IPSocket.getaddress(rest[0]) unless rest.empty?
+ original_resolv_initialize(IPSocket.getaddress(host), serv, *rest)
+ end
+end
+
+class UDPSocket
+ alias original_resolv_bind bind
+ def bind(host, port)
+ original_resolv_bind(IPSocket.getaddress(host), port)
+ end
+
+ alias original_resolv_connect connect
+ def connect(host, port)
+ original_resolv_connect(IPSocket.getaddress(host), port)
+ end
+
+ alias original_resolv_send send
+ def send(mesg, flags, *rest)
+ if rest.length == 2
+ host, port = rest
+ begin
+ addrs = Resolv.getaddresses(host)
+ rescue Resolv::ResolvError
+ raise SocketError, "Hostname not known: #{host}"
+ end
+ err = nil
+ addrs[0...-1].each {|addr|
+ begin
+ return original_resolv_send(mesg, flags, addr, port)
+ rescue SystemCallError
+ end
+ }
+ original_resolv_send(mesg, flags, addrs[-1], port)
+ else
+ original_resolv_send(mesg, flags, *rest)
+ end
+ end
+end
+
+class SOCKSSocket
+ alias original_resolv_initialize initialize
+ def initialize(host, serv)
+ original_resolv_initialize(IPSocket.getaddress(host), port)
+ end
+end if defined? SOCKSSocket