p2p: close the right number of connections on setting max in/out peers
This commit is contained in:
parent
39e9fa05b8
commit
d46fb70930
|
@ -99,6 +99,8 @@ public:
|
||||||
template<class callback_t>
|
template<class callback_t>
|
||||||
bool for_connection(const boost::uuids::uuid &connection_id, const callback_t &cb);
|
bool for_connection(const boost::uuids::uuid &connection_id, const callback_t &cb);
|
||||||
size_t get_connections_count();
|
size_t get_connections_count();
|
||||||
|
size_t get_out_connections_count();
|
||||||
|
size_t get_in_connections_count();
|
||||||
void set_handler(levin_commands_handler<t_connection_context>* handler, void (*destroy)(levin_commands_handler<t_connection_context>*) = NULL);
|
void set_handler(levin_commands_handler<t_connection_context>* handler, void (*destroy)(levin_commands_handler<t_connection_context>*) = NULL);
|
||||||
|
|
||||||
async_protocol_handler_config():m_pcommands_handler(NULL), m_pcommands_handler_destroy(NULL), m_max_packet_size(LEVIN_DEFAULT_MAX_PACKET_SIZE), m_invoke_timeout(LEVIN_DEFAULT_TIMEOUT_PRECONFIGURED)
|
async_protocol_handler_config():m_pcommands_handler(NULL), m_pcommands_handler_destroy(NULL), m_max_packet_size(LEVIN_DEFAULT_MAX_PACKET_SIZE), m_invoke_timeout(LEVIN_DEFAULT_TIMEOUT_PRECONFIGURED)
|
||||||
|
@ -882,6 +884,28 @@ size_t async_protocol_handler_config<t_connection_context>::get_connections_coun
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
template<class t_connection_context>
|
template<class t_connection_context>
|
||||||
|
size_t async_protocol_handler_config<t_connection_context>::get_out_connections_count()
|
||||||
|
{
|
||||||
|
CRITICAL_REGION_LOCAL(m_connects_lock);
|
||||||
|
size_t count = 0;
|
||||||
|
for (const auto &c: m_connects)
|
||||||
|
if (!c.second->m_connection_context.m_is_income)
|
||||||
|
++count;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------------------
|
||||||
|
template<class t_connection_context>
|
||||||
|
size_t async_protocol_handler_config<t_connection_context>::get_in_connections_count()
|
||||||
|
{
|
||||||
|
CRITICAL_REGION_LOCAL(m_connects_lock);
|
||||||
|
size_t count = 0;
|
||||||
|
for (const auto &c: m_connects)
|
||||||
|
if (c.second->m_connection_context.m_is_income)
|
||||||
|
++count;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------------------
|
||||||
|
template<class t_connection_context>
|
||||||
void async_protocol_handler_config<t_connection_context>::set_handler(levin_commands_handler<t_connection_context>* handler, void (*destroy)(levin_commands_handler<t_connection_context>*))
|
void async_protocol_handler_config<t_connection_context>::set_handler(levin_commands_handler<t_connection_context>* handler, void (*destroy)(levin_commands_handler<t_connection_context>*))
|
||||||
{
|
{
|
||||||
if (m_pcommands_handler && m_pcommands_handler_destroy)
|
if (m_pcommands_handler && m_pcommands_handler_destroy)
|
||||||
|
|
|
@ -2207,7 +2207,7 @@ namespace nodetool
|
||||||
auto public_zone = m_network_zones.find(epee::net_utils::zone::public_);
|
auto public_zone = m_network_zones.find(epee::net_utils::zone::public_);
|
||||||
if (public_zone != m_network_zones.end())
|
if (public_zone != m_network_zones.end())
|
||||||
{
|
{
|
||||||
const auto current = public_zone->second.m_config.m_net_config.max_out_connection_count;
|
const auto current = public_zone->second.m_net_server.get_config_object().get_out_connections_count();
|
||||||
public_zone->second.m_config.m_net_config.max_out_connection_count = count;
|
public_zone->second.m_config.m_net_config.max_out_connection_count = count;
|
||||||
if(current > count)
|
if(current > count)
|
||||||
public_zone->second.m_net_server.get_config_object().del_out_connections(current - count);
|
public_zone->second.m_net_server.get_config_object().del_out_connections(current - count);
|
||||||
|
@ -2220,7 +2220,7 @@ namespace nodetool
|
||||||
auto public_zone = m_network_zones.find(epee::net_utils::zone::public_);
|
auto public_zone = m_network_zones.find(epee::net_utils::zone::public_);
|
||||||
if (public_zone != m_network_zones.end())
|
if (public_zone != m_network_zones.end())
|
||||||
{
|
{
|
||||||
const auto current = public_zone->second.m_config.m_net_config.max_in_connection_count;
|
const auto current = public_zone->second.m_net_server.get_config_object().get_in_connections_count();
|
||||||
public_zone->second.m_config.m_net_config.max_in_connection_count = count;
|
public_zone->second.m_config.m_net_config.max_in_connection_count = count;
|
||||||
if(current > count)
|
if(current > count)
|
||||||
public_zone->second.m_net_server.get_config_object().del_in_connections(current - count);
|
public_zone->second.m_net_server.get_config_object().del_in_connections(current - count);
|
||||||
|
|
Loading…
Reference in New Issue