mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
Comments/explanation for #17873
This commit is contained in:
parent
74a474a2e7
commit
9f5431c79f
@ -133,6 +133,22 @@
|
|||||||
#include "feature/nodelist/routerinfo_st.h"
|
#include "feature/nodelist/routerinfo_st.h"
|
||||||
#include "core/or/socks_request_st.h"
|
#include "core/or/socks_request_st.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On Windows and Linux we cannot reliably bind() a socket to an
|
||||||
|
* address and port if: 1) There's already a socket bound to wildcard
|
||||||
|
* address (0.0.0.0 or ::) with the same port; 2) We try to bind()
|
||||||
|
* to wildcard address and there's another socket bound to a
|
||||||
|
* specific address and the same port.
|
||||||
|
*
|
||||||
|
* To address this problem on these two platforms we implement a
|
||||||
|
* routine that:
|
||||||
|
* 1) Checks if first attempt to bind() a new socket failed with
|
||||||
|
* EADDRINUSE.
|
||||||
|
* 2) If so, it will close the appropriate old listener connection and
|
||||||
|
* 3) Attempts bind()'ing the new listener socket again.
|
||||||
|
*
|
||||||
|
* For further information, see ticket #17873.
|
||||||
|
*/
|
||||||
#if defined(__linux__) || defined(_WIN32)
|
#if defined(__linux__) || defined(_WIN32)
|
||||||
#define ENABLE_LISTENER_REBIND
|
#define ENABLE_LISTENER_REBIND
|
||||||
#endif
|
#endif
|
||||||
@ -1191,6 +1207,9 @@ tor_listen(tor_socket_t fd)
|
|||||||
*
|
*
|
||||||
* <b>address</b> is only used for logging purposes and to add the information
|
* <b>address</b> is only used for logging purposes and to add the information
|
||||||
* to the conn.
|
* to the conn.
|
||||||
|
*
|
||||||
|
* Set <b>addr_in_use</b> to true in case socket binding fails with
|
||||||
|
* EADDRINUSE.
|
||||||
*/
|
*/
|
||||||
static connection_t *
|
static connection_t *
|
||||||
connection_listener_new(const struct sockaddr *listensockaddr,
|
connection_listener_new(const struct sockaddr *listensockaddr,
|
||||||
|
Loading…
Reference in New Issue
Block a user