RubyDNS文档

  1. 安装
  2. 基本的DNS服务器
  3. 异步DNS查询
  4. API文档

RubyDNS可以被用来当作异步DNS客户端,请求一个指定的DNS服务器或系统默认的解析器。

# There technically should be at least one nameserver:
resolver = RubyDNS::Resolver.new(RubyDNS::System::nameservers)

EventMachine::run do
	resolver.query('google.com') do |response|
		assert_equal RubyDNS::Message, response.class
		assert_equal Resolv::DNS::RCode::NoError, response.rcode

		EventMachine::stop
	end
end

EventMachine 提供基本的异步事件处理,因此 RubyDNS::Resolver相关的代码必须在EventMachine 上下文里执行。

超时处理

因为是异步服务,一个超时时间可以被设置(默认是5秒)。如果在给定的时间内没有收到响应,一个RubyDNS::ResolutionFailure 错误就会返回给调用者,在response 参数里:

SERVERS = [[:udp, '127.0.0.1', 5330], [:tcp, '127.0.0.1', 5330]]
resolver = RubyDNS::Resolver.new(SERVERS, :timeout => 60)

更多例子,请查看rubydns/test/test_slow_server.rb.

日志

额外的调试输出可以被写到日志文件,通过提供的:logger 选项:

require 'logger'

SERVERS = [[:udp, '127.0.0.1', 5330], [:tcp, '127.0.0.1', 5330]]
resolver = RubyDNS::Resolver.new(SERVERS, :logger => Logger.new($stderr))