Add a per-process limit on open UDP sockets.
This adds a default limit of 6000 on the open UDP sockets throughout the entire process, configurable with the "LimitOpenUDPSockets" feature.
An "open UDP socket" specifically means a net::UDPSocket which successfully called Open(), and has not yet called Close().
Once the limit has been reached, opening UDP socket will fail with ERR_INSUFFICIENT_RESOURCES.
In Chrome Browser, UDP sockets are brokered through a single process (that hosting the Network Service), so this is functionally a browser-wide limit too.
Bug: 1083278
Change-Id: Ib95ab14b7ccf5e15410b9df9537c66c858de2d7d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2350395
Reviewed-by: David Schinazi <[email protected]>
Commit-Queue: Eric Roman <[email protected]>
Cr-Commit-Position: refs/heads/master@{#797523}
diff --git a/net/socket/udp_socket_posix.h b/net/socket/udp_socket_posix.h
index df3bf973..6b77e9c 100644
--- a/net/socket/udp_socket_posix.h
+++ b/net/socket/udp_socket_posix.h
@@ -30,6 +30,7 @@
#include "net/socket/diff_serv_code_point.h"
#include "net/socket/socket_descriptor.h"
#include "net/socket/socket_tag.h"
+#include "net/socket/udp_socket_global_limits.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#if defined(__ANDROID__) && defined(__aarch64__)
@@ -630,6 +631,10 @@
// enable_experimental_recv_optimization() method.
bool experimental_recv_optimization_enabled_;
+ // Manages decrementing the global open UDP socket counter when this
+ // UDPSocket is destroyed.
+ OwnedUDPSocketCount owned_socket_count_;
+
THREAD_CHECKER(thread_checker_);
// Used for alternate writes that are posted for concurrent execution.