This is an automated email from the git hooks/post-receive script.
nickm pushed a commit to branch main
in repository tor.
The following commit(s) were added to refs/heads/main by this push:
new 87b2ce6f84 Trigger OOS on bind failures (fixes #40597)
87b2ce6f84 is described below
commit 87b2ce6f848ec3a65a7a06ef1edce5a0652ad9a3
Author: Alex Xu (Hello71) <alex_y_xu(a)yahoo.ca>
AuthorDate: Sat May 21 15:52:31 2022 -0400
Trigger OOS on bind failures (fixes #40597)
---
changes/issue40597 | 4 ++++
src/core/mainloop/connection.c | 24 +++++++++++++++---------
2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/changes/issue40597 b/changes/issue40597
new file mode 100644
index 0000000000..db2220805e
--- /dev/null
+++ b/changes/issue40597
@@ -0,0 +1,4 @@
+ o Minor features (relays):
+ - Trigger OOS when bind fails with EADDRINUSE. This improves fairness when
+ a large number of exit connections are requested, and properly signals
+ exhaustion to the network. Fixes issue 40597; patch by Alex Xu (Hello71).
diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c
index 9271a70914..75fc3c8918 100644
--- a/src/core/mainloop/connection.c
+++ b/src/core/mainloop/connection.c
@@ -2224,21 +2224,27 @@ connection_connect_sockaddr,(connection_t *conn,
tor_socket_strerror(errno));
}
- /*
- * We've got the socket open; give the OOS handler a chance to check
- * against configured maximum socket number, but tell it no exhaustion
- * failure.
- */
- connection_check_oos(get_n_open_sockets(), 0);
-
if (bindaddr && bind(s, bindaddr, bindaddr_len) < 0) {
*socket_error = tor_socket_errno(s);
- log_warn(LD_NET,"Error binding network socket: %s",
- tor_socket_strerror(*socket_error));
+ if (ERRNO_IS_EADDRINUSE(*socket_error)) {
+ socket_failed_from_resource_exhaustion();
+ connection_check_oos(get_n_open_sockets(), 1);
+ } else {
+ log_warn(LD_NET,"Error binding network socket: %s",
+ tor_socket_strerror(*socket_error));
+ connection_check_oos(get_n_open_sockets(), 0);
+ }
tor_close_socket(s);
return -1;
}
+ /*
+ * We've got the socket open and bound; give the OOS handler a chance to
+ * check against configured maximum socket number, but tell it no exhaustion
+ * failure.
+ */
+ connection_check_oos(get_n_open_sockets(), 0);
+
tor_assert(options);
if (options->ConstrainedSockets)
set_constrained_socket_buffers(s, (int)options->ConstrainedSockSize);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.