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 _3_1'>ruby_3_1 The Ruby Programming Language
summaryrefslogtreecommitdiff
path: root/misc/inf-ruby.el
AgeCommit message (Expand)Author
2008-09-06* misc/*.el: untabify, for interal consistency and consistencymatz
2008-01-06* $Date$ keyword removed to avoid inclusion of locale dependentakr
2004-07-27* eval.c (rb_eval): copy on write for argument local variablematz
2002-09-07* misc/inf-ruby.el (inferior-ruby-error-regexp-alist): regexpnobu
2002-08-19* misc/inf-ruby.el (inf-ruby-keys): ruby-send-definitionnobu
2002-01-29* file.c (rb_stat_rdev_major): added. [new]matz