# File lib/Dnsruby/SingleResolver.rb, line 263
    def send_async(*args) # msg, client_queue, client_query_id, use_tcp=@use_tcp)
      # @TODO@ Need to select a good Header ID here - see forgery-resilience RFC draft for details
      msg = args[0]
      client_query_id = nil
      client_queue = nil
      use_tcp = @use_tcp
      if (msg.kind_of?String)
        msg = Message.new(msg)
      end
      query_packet = make_query_packet(msg, use_tcp)
      if (udp_packet_size < query_packet.length)
        TheLog.debug("Query packet length exceeds max UDP packet size - using TCP")
        use_tcp = true
      end
      if (args.length > 1)
        if (args[1].class==Queue)
          client_queue = args[1]
        elsif (args.length == 2)
          use_tcp = args[1]
        end
        if (args.length > 2)
          client_query_id = args[2]
          if (args.length > 3)
            use_tcp = args[3]
          end
        end
      end
      # Need to keep track of the request mac (if using tsig) so we can validate the response (RFC2845 4.1)
      #Are we using EventMachine or native Dnsruby?
      if (Resolver.eventmachine?)
        return send_eventmachine(query_packet, msg, client_query_id, client_queue, use_tcp)
      else
        if (!client_query_id)
          client_query_id = Time.now + rand(10000)
        end
        send_dnsruby(query_packet, msg, client_query_id, client_queue, use_tcp)
        return client_query_id
      end
    end