ret = asyncresolve(ip, domain, type,doTCP, sendRDQuery, EDNS0Level, now, srcmask, context, outgoingLoggers, fstrmLoggers, exportTypes, lwr, chained, connection);
}
if (connection.d_handler && lwr->d_validpacket) {
- t_tcp_manager.store(ip, connection);
+ t_tcp_manager.store(*now, ip, std::move(connection));
}
}
return ret;
SyncRes::pruneThrottledServers();
SyncRes::pruneNonResolving(now.tv_sec - SyncRes::s_nonresolvingnsthrottletime);
Utility::gettimeofday(&last_prune, nullptr);
- t_tcp_manager.cleanup();
+ t_tcp_manager.cleanup(now);
}
if(isHandlerThread()) {
size_t TCPOutConnectionManager::maxIdlePerAuth;
size_t TCPOutConnectionManager::maxIdlePerThread;
-void TCPOutConnectionManager::cleanup()
+void TCPOutConnectionManager::cleanup(const struct timeval& now)
{
if (maxIdleTime.tv_sec == 0 && maxIdleTime.tv_usec == 0) {
// no maximum idle time
return;
}
- struct timeval now;
- gettimeofday(&now, nullptr);
for (auto it = d_idle_connections.begin(); it != d_idle_connections.end();) {
timeval idle = now - it->second.d_last_used;
}
}
-void TCPOutConnectionManager::store(const ComboAddress& ip, Connection& connection)
+void TCPOutConnectionManager::store(const struct timeval& now, const ComboAddress& ip, Connection&& connection)
{
if (d_idle_connections.size() >= maxIdlePerThread || d_idle_connections.count(ip) >= maxIdlePerAuth) {
- cleanup();
+ cleanup(now);
}
if (d_idle_connections.size() >= maxIdlePerThread) {
size_t d_numqueries{0};
};
- void store(const ComboAddress& ip, Connection& connection);
+ void store(const struct timeval &now, const ComboAddress& ip, Connection&& connection);
Connection get(const ComboAddress& ip);
- void cleanup();
+ void cleanup(const struct timeval& now);
size_t size() const
{