source: extensions/gsdl-video/trunk/installed/cmdline/lib/ruby/1.8/resolv-replace.rb@ 18425

Last change on this file since 18425 was 18425, checked in by davidb, 15 years ago

Video extension to Greenstone

File size: 1.5 KB
Line 
1require 'socket'
2require 'resolv'
3
4class << IPSocket
5 alias original_resolv_getaddress getaddress
6 def getaddress(host)
7 begin
8 return Resolv.getaddress(host).to_s
9 rescue Resolv::ResolvError
10 raise SocketError, "Hostname not known: #{host}"
11 end
12 end
13end
14
15class TCPSocket
16 alias original_resolv_initialize initialize
17 def initialize(host, serv, *rest)
18 rest[0] = IPSocket.getaddress(rest[0]) unless rest.empty?
19 original_resolv_initialize(IPSocket.getaddress(host), serv, *rest)
20 end
21end
22
23class UDPSocket
24 alias original_resolv_bind bind
25 def bind(host, port)
26 original_resolv_bind(IPSocket.getaddress(host), port)
27 end
28
29 alias original_resolv_connect connect
30 def connect(host, port)
31 original_resolv_connect(IPSocket.getaddress(host), port)
32 end
33
34 alias original_resolv_send send
35 def send(mesg, flags, *rest)
36 if rest.length == 2
37 host, port = rest
38 begin
39 addrs = Resolv.getaddresses(host)
40 rescue Resolv::ResolvError
41 raise SocketError, "Hostname not known: #{host}"
42 end
43 err = nil
44 addrs[0...-1].each {|addr|
45 begin
46 return original_resolv_send(mesg, flags, addr, port)
47 rescue SystemCallError
48 end
49 }
50 original_resolv_send(mesg, flags, addrs[-1], port)
51 else
52 original_resolv_send(mesg, flags, *rest)
53 end
54 end
55end
56
57class SOCKSSocket
58 alias original_resolv_initialize initialize
59 def initialize(host, serv)
60 original_resolv_initialize(IPSocket.getaddress(host), port)
61 end
62end if defined? SOCKSSocket
Note: See TracBrowser for help on using the repository browser.