summaryrefslogtreecommitdiff
path: root/server/NetworkController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/NetworkController.cpp')
-rw-r--r--server/NetworkController.cpp23
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