StatBag S;
-std::atomic<unsigned int> g_recvcounter, g_recvbytes;
-volatile bool g_done;
+static std::atomic<unsigned int> g_recvcounter, g_recvbytes;
+static volatile bool g_done;
namespace po = boost::program_options;
-po::variables_map g_vm;
+static po::variables_map g_vm;
+
+static bool g_quiet;
static void* recvThread(const vector<Socket*>* sockets)
{
socklen_t len=sizeof(psize);
if(!getsockopt(fd, SOL_SOCKET, optname, (char*)&psize, &len) && psize > size) {
- cerr<<"Not decreasing socket buffer size from "<<psize<<" to "<<size<<endl;
+ if (!g_quiet) {
+ cerr<<"Not decreasing socket buffer size from "<<psize<<" to "<<size<<endl;
+ }
return;
}
- if (setsockopt(fd, SOL_SOCKET, optname, (char*)&size, sizeof(size)) < 0 )
- cerr<<"Warning: unable to raise socket buffer size to "<<size<<": "<<strerror(errno)<<endl;
+ if (setsockopt(fd, SOL_SOCKET, optname, (char*)&size, sizeof(size)) < 0 ) {
+ if (!g_quiet) {
+ cerr<<"Warning: unable to raise socket buffer size to "<<size<<": "<<strerror(errno)<<endl;
+ }
+ }
}
}
bool wantRecursion = g_vm.count("want-recursion");
- bool beQuiet = g_vm.count("quiet");
bool useECSFromFile = g_vm.count("ecs-from-file");
+ g_quiet = g_vm.count("quiet");
double hitrate = g_vm["hitrate"].as<double>();
if (hitrate > 100 || hitrate < 0) {
return EXIT_FAILURE;
}
- if (!beQuiet) {
+ if (!g_quiet) {
cout<<"Adding ECS option to outgoing queries with random addresses from the "<<ecsRange.toString()<<" range"<<endl;
}
}
param.sched_priority=99;
if(sched_setscheduler(0, SCHED_FIFO, ¶m) < 0) {
- cerr<<"Unable to set SCHED_FIFO: "<<strerror(errno)<<endl;
+ if (!g_quiet) {
+ cerr<<"Unable to set SCHED_FIFO: "<<strerror(errno)<<endl;
+ }
}
ifstream ifs(g_vm["query-file"].as<string>());
unknown.emplace_back(std::make_shared<vector<uint8_t>>(packet));
}
random_shuffle(unknown.begin(), unknown.end());
- if (!beQuiet) {
+ if (!g_quiet) {
cout<<"Generated "<<unknown.size()<<" ready to use queries"<<endl;
}
for(qps=qpsstart;;) {
double seconds=1;
- if (!beQuiet) {
+ if (!g_quiet) {
cout<<"Aiming at "<<qps<< "qps (RD="<<wantRecursion<<") for "<<seconds<<" seconds at cache hitrate "<<100.0*hitrate<<"%";
}
unsigned int misses=(1-hitrate)*qps*seconds;
if (misses == 0) {
misses = 1;
}
- if (!beQuiet) {
+ if (!g_quiet) {
cout<<", need "<<misses<<" misses, "<<total<<" queries, have "<<unknown.size()<<" unknown left!"<<endl;
}
const auto udiff = dt.udiffNoReset();
const auto realqps=toSend.size()/(udiff/1000000.0);
- if (!beQuiet) {
+ if (!g_quiet) {
cout<<"Achieved "<<realqps<<" qps over "<< udiff/1000000.0<<" seconds"<<endl;
}
const auto udiffReceived = dt.udiff();
const auto realReceivedQPS = received/(udiffReceived/1000000.0);
double perc=received*100.0/toSend.size();
- if (!beQuiet) {
+ if (!g_quiet) {
cout<<"Received "<<received<<" packets over "<< udiffReceived/1000000.0<<" seconds ("<<perc<<"%, adjusted received rate "<<realReceivedQPS<<" qps)"<<endl;
}
}
if (minimumSuccessRate > 0.0 && perc < minimumSuccessRate) {
- if (beQuiet) {
+ if (g_quiet) {
cout<<bestQPS<<endl;
}
else {
catch(std::exception& e)
{
cerr<<"Fatal error: "<<e.what()<<endl;
+ return EXIT_FAILURE;
}