def req(body, agent=nil, options=false, waitfor=0, &block)
if body.is_a?(Message)
agent = body.agent
waitfor = body.discovered_hosts.size || 0
@options = body.options
end
@options = options if options
threaded = @options[:threaded]
timeout = @discoverer.discovery_timeout(@options[:timeout], @options[:filter])
request = createreq(body, agent, @options[:filter])
publish_timeout = @options[:publish_timeout]
stat = {:starttime => Time.now.to_f, :discoverytime => 0, :blocktime => 0, :totaltime => 0}
STDOUT.sync = true
hosts_responded = 0
begin
if threaded
hosts_responded = threaded_req(request, publish_timeout, timeout, waitfor, &block)
else
hosts_responded = unthreaded_req(request, publish_timeout, timeout, waitfor, &block)
end
rescue Interrupt => e
ensure
unsubscribe(agent, :reply)
end
return update_stat(stat, hosts_responded, request.requestid)
end