Selaa lähdekoodia

Write a comment to explain may_need_rebind condition

rl1987 5 vuotta sitten
vanhempi
commit
89c4a3a0b6
1 muutettua tiedostoa jossa 9 lisäystä ja 0 poistoa
  1. 9 0
      src/core/mainloop/connection.c

+ 9 - 0
src/core/mainloop/connection.c

@@ -2797,6 +2797,15 @@ retry_listener_ports(smartlist_t *old_conns,
           break;
         }
 #ifdef ENABLE_LISTENER_REBIND
+        /* Rebinding may be needed if all of the following are true:
+         * 1) Address family is the same in old and new listeners.
+         * 2) Port number matches exactly (numeric value is the same).
+         * 3) *One* of listeners (either old one or new one) has a
+         *    wildcard IP address (0.0.0.0 or [::]).
+         *
+         * These are the exact conditions for a first bind() syscall
+         * to fail with EADDRINUSE.
+         */
         const int may_need_rebind =
           tor_addr_family(&wanted->addr) == tor_addr_family(&conn->addr) &&
           port_matches_exact && bool_neq(tor_addr_is_null(&wanted->addr),