diff options
author | Roger Dingledine <arma@torproject.org> | 2003-12-14 06:03:46 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2003-12-14 06:03:46 +0000 |
commit | 36ea39ec9caa47cd804887655947002eeab71a16 (patch) | |
tree | e8f630101654e0193e168243b106a1030bd29be4 | |
parent | 50e17d633bec55943322bd547003cf3625ce05e1 (diff) | |
download | tor-36ea39ec9caa47cd804887655947002eeab71a16.tar tor-36ea39ec9caa47cd804887655947002eeab71a16.tar.gz |
on hup, close and rebind listener ports too (in case their config has changed)
svn:r926
-rw-r--r-- | src/or/connection.c | 20 | ||||
-rw-r--r-- | src/or/cpuworker.c | 2 | ||||
-rw-r--r-- | src/or/dirserv.c | 12 | ||||
-rw-r--r-- | src/or/main.c | 5 |
4 files changed, 25 insertions, 14 deletions
diff --git a/src/or/connection.c b/src/or/connection.c index e4aba9620..9ba9f9946 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -289,6 +289,15 @@ int connection_connect(connection_t *conn, char *address, uint32_t addr, uint16_ return 1; } +static void listener_close_if_present(int type) { + connection_t *conn = connection_get_by_type(type); + if (conn) { + close(conn->s); + conn->s = -1; + conn->marked_for_close = 1; + } +} + /* start all connections that should be up but aren't */ int retry_all_connections(void) { @@ -296,19 +305,22 @@ int retry_all_connections(void) { router_retry_connections(); } - if(options.ORPort && !connection_get_by_type(CONN_TYPE_OR_LISTENER)) { + if(options.ORPort) { + listener_close_if_present(CONN_TYPE_OR_LISTENER); if(connection_create_listener(options.ORBindAddress, options.ORPort, CONN_TYPE_OR_LISTENER) < 0) return -1; } - if(options.DirPort && !connection_get_by_type(CONN_TYPE_DIR_LISTENER)) { + if(options.DirPort) { + listener_close_if_present(CONN_TYPE_DIR_LISTENER); if(connection_create_listener(options.DirBindAddress, options.DirPort, CONN_TYPE_DIR_LISTENER) < 0) return -1; } - - if(options.SocksPort && !connection_get_by_type(CONN_TYPE_AP_LISTENER)) { + + if(options.SocksPort) { + listener_close_if_present(CONN_TYPE_AP_LISTENER); if(connection_create_listener(options.SocksBindAddress, options.SocksPort, CONN_TYPE_AP_LISTENER) < 0) return -1; diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c index 2ade1ae2d..c964115f9 100644 --- a/src/or/cpuworker.c +++ b/src/or/cpuworker.c @@ -58,7 +58,7 @@ int connection_cpu_process_inbuf(connection_t *conn) { assert(conn && conn->type == CONN_TYPE_CPUWORKER); if(conn->inbuf_reached_eof) { - log_fn(LOG_WARN,"Read eof. Worker dying."); + log_fn(LOG_WARN,"Read eof. Worker has died."); if(conn->state != CPUWORKER_STATE_IDLE) { /* the circ associated with this cpuworker will have to wait until * it gets culled in run_connection_housekeeping(), since we have diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 4db989b6b..8dc4de008 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -52,7 +52,7 @@ dirserv_add_own_fingerprint(const char *nickname, crypto_pk_env_t *pk) } /* return 0 on success, -1 on failure */ -int +int dirserv_parse_fingerprint_file(const char *fname) { FILE *file; @@ -172,7 +172,7 @@ static void free_descriptor_entry(descriptor_entry_t *desc) free(desc); } -void +void dirserv_free_descriptors() { int i; @@ -311,7 +311,7 @@ dirserv_init_from_directory_string(const char *dir) return 0; } -static int +static int list_running_servers(char **nicknames_out) { char *nickname_lst[MAX_ROUTERS_IN_DIR]; @@ -323,7 +323,7 @@ list_running_servers(char **nicknames_out) int length; *nicknames_out = NULL; nickname_lst[n++] = options.Nickname; - + get_connection_array(&connection_array, &n_conns); for (i = 0; i<n_conns; ++i) { conn = connection_array[i]; @@ -349,7 +349,6 @@ list_running_servers(char **nicknames_out) return 0; } - int dirserv_dump_directory_to_string(char *s, int maxlen, crypto_pk_env_t *private_key) @@ -400,8 +399,7 @@ dirserv_dump_directory_to_string(char *s, int maxlen, ((int)digest[0])&0xff,((int)digest[1])&0xff, ((int)digest[2])&0xff,((int)digest[3])&0xff); - strncpy(cp, - "-----BEGIN SIGNATURE-----\n", maxlen-i); + strncpy(cp, "-----BEGIN SIGNATURE-----\n", maxlen-i); i = strlen(s); cp = s+i; diff --git a/src/or/main.c b/src/or/main.c index 3464e3d14..ba4fedb2c 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -481,8 +481,9 @@ static int do_main_loop(void) { /* no need to provide argc/v, they've been cached inside init_from_config */ exit(1); } - if(options.ORPort) { - router_retry_connections(); + if(retry_all_connections() < 0) { + log_fn(LOG_ERR,"Failed to bind one of the listener ports."); + return -1; } if(options.DirPort) { /* reload the fingerprint file */ |