home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / ruby / 1.8 / resolv-replace.rb < prev    next >
Encoding:
Ruby Source  |  2004-02-01  |  1.5 KB  |  63 lines

  1. require 'socket'
  2. require 'resolv'
  3.  
  4. class << 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
  13. end
  14.  
  15. class 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
  21. end
  22.  
  23. class 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
  55. end
  56.  
  57. class SOCKSSocket
  58.   alias original_resolv_initialize initialize
  59.   def initialize(host, serv)
  60.     original_resolv_initialize(IPSocket.getaddress(host), port)
  61.   end
  62. end if defined? SOCKSSocket
  63.