diff options
Diffstat (limited to 'server/NetworkController.cpp')
| -rw-r--r-- | server/NetworkController.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/server/NetworkController.cpp b/server/NetworkController.cpp index 43a55bdd..5b2cd892 100644 --- a/server/NetworkController.cpp +++ b/server/NetworkController.cpp @@ -355,6 +355,9 @@ int NetworkController::createPhysicalNetworkLocked(unsigned netId, Permission pe } mNetworks[netId] = physicalNetwork; + + updateTcpSocketMonitorPolling(); + return 0; } @@ -448,6 +451,9 @@ int NetworkController::destroyNetwork(unsigned netId) { mNetworks.erase(netId); delete network; _resolv_delete_cache_for_net(netId); + + updateTcpSocketMonitorPolling(); + return ret; } @@ -730,5 +736,22 @@ int NetworkController::modifyFallthroughLocked(unsigned vpnNetId, bool add) { return 0; } +void NetworkController::updateTcpSocketMonitorPolling() { + bool physicalNetworkExists = false; + for (const auto& entry : mNetworks) { + const auto& network = entry.second; + if (network->getType() == Network::PHYSICAL && network->getNetId() >= MIN_NET_ID) { + physicalNetworkExists = true; + break; + } + } + + if (physicalNetworkExists) { + android::net::gCtls->tcpSocketMonitor.resumePolling(); + } else { + android::net::gCtls->tcpSocketMonitor.suspendPolling(); + } +} + } // namespace net } // namespace android |
