From 70ee8f843ac97cd096d29f97c3e8d04c93415aba Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Fri, 27 Nov 2009 13:46:47 +0000 Subject: [PATCH] Add the config option default-server-timeout to control the assumed default server timeout. Since Privoxy no longer returns an error message for connection resets on reused client connections, assuming larger server timeout values appears to actually work pretty well as long as connections aren't shared. --- jcc.c | 20 ++++++++++++-------- loadcfg.c | 35 ++++++++++++++++++++++++++++++++++- project.h | 5 ++++- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/jcc.c b/jcc.c index a1f09665..7cfa56d7 100644 --- a/jcc.c +++ b/jcc.c @@ -1,4 +1,4 @@ -const char jcc_rcs[] = "$Id: jcc.c,v 1.302 2009/10/09 16:50:50 fabiankeil Exp $"; +const char jcc_rcs[] = "$Id: jcc.c,v 1.303 2009/10/29 16:55:29 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jcc.c,v $ @@ -2518,19 +2518,23 @@ static void serve(struct client_state *csp) && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED) && (csp->cfd != JB_INVALID_SOCKET) && (csp->server_connection.sfd != JB_INVALID_SOCKET) - && socket_is_still_usable(csp->server_connection.sfd) - && (latency < csp->server_connection.keep_alive_timeout); + && socket_is_still_usable(csp->server_connection.sfd); if (continue_chatting) { - unsigned int client_timeout; - if (!(csp->flags & CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET)) { - log_error(LOG_LEVEL_CONNECT, "The server didn't specify how long " - "the connection will stay open. Assume it's only a second."); - csp->server_connection.keep_alive_timeout = 1; + csp->server_connection.keep_alive_timeout = csp->config->default_server_timeout; + log_error(LOG_LEVEL_CONNECT, + "The server didn't specify how long the connection will stay open. " + "Assumed timeout is: %u.", csp->server_connection.keep_alive_timeout); } + continue_chatting = (latency < csp->server_connection.keep_alive_timeout); + } + + if (continue_chatting) + { + unsigned int client_timeout; client_timeout = (unsigned)csp->server_connection.keep_alive_timeout - latency; diff --git a/loadcfg.c b/loadcfg.c index fc6b557d..33e331ec 100644 --- a/loadcfg.c +++ b/loadcfg.c @@ -1,4 +1,4 @@ -const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.105 2009/09/06 14:15:46 fabiankeil Exp $"; +const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.106 2009/09/10 14:45:17 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/loadcfg.c,v $ @@ -136,6 +136,7 @@ static struct file_list *current_configfile = NULL; #define hash_confdir 1978389ul /* "confdir" */ #define hash_connection_sharing 1348841265ul /* "connection-sharing" */ #define hash_debug 78263ul /* "debug" */ +#define hash_default_server_timeout 2530089913ul /* "default-server-timeout" */ #define hash_deny_access 1227333715ul /* "deny-access" */ #define hash_enable_edit_actions 2517097536ul /* "enable-edit-actions" */ #define hash_enable_remote_toggle 2979744683ul /* "enable-remote-toggle" */ @@ -358,6 +359,7 @@ struct configuration_spec * load_config(void) config->max_client_connections = 0; config->socket_timeout = 300; /* XXX: Should be a macro. */ #ifdef FEATURE_CONNECTION_KEEP_ALIVE + config->default_server_timeout = 0; config->keep_alive_timeout = DEFAULT_KEEP_ALIVE_TIMEOUT; config->feature_flags &= ~RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE; config->feature_flags &= ~RUNTIME_FEATURE_CONNECTION_SHARING; @@ -521,6 +523,27 @@ struct configuration_spec * load_config(void) config->debug |= atoi(arg); break; +/* ************************************************************************* + * default-server-timeout timeout + * *************************************************************************/ +#ifdef FEATURE_CONNECTION_KEEP_ALIVE + case hash_default_server_timeout : + if (*arg != '\0') + { + int timeout = atoi(arg); + if (0 < timeout) + { + config->default_server_timeout = (unsigned int)timeout; + } + else + { + log_error(LOG_LEVEL_FATAL, + "Invalid default-server-timeout value: %s", arg); + } + } + break; +#endif + /* ************************************************************************* * deny-access source-ip[/significant-bits] [dest-ip[/significant-bits]] * *************************************************************************/ @@ -1321,6 +1344,16 @@ struct configuration_spec * load_config(void) } } +#ifdef FEATURE_CONNECTION_KEEP_ALIVE + if (config->default_server_timeout > config->keep_alive_timeout) + { + log_error(LOG_LEVEL_ERROR, + "Reducing the default-server-timeout from %d to the keep-alive-timeout %d.", + config->default_server_timeout, config->keep_alive_timeout); + config->default_server_timeout = config->keep_alive_timeout; + } +#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */ + #ifdef FEATURE_CONNECTION_SHARING if (config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE) { diff --git a/project.h b/project.h index 5eab88fb..ae80b49a 100644 --- a/project.h +++ b/project.h @@ -1,7 +1,7 @@ #ifndef PROJECT_H_INCLUDED #define PROJECT_H_INCLUDED /** Version string. */ -#define PROJECT_H_VERSION "$Id: project.h,v 1.151 2009/10/04 15:45:11 fabiankeil Exp $" +#define PROJECT_H_VERSION "$Id: project.h,v 1.152 2009/11/08 17:54:09 ler762 Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/project.h,v $ @@ -1257,6 +1257,9 @@ struct configuration_spec #ifdef FEATURE_CONNECTION_KEEP_ALIVE /* Maximum number of seconds after which an open connection will no longer be reused. */ unsigned int keep_alive_timeout; + + /* Assumed server-side keep alive timeout if none is specified. */ + unsigned int default_server_timeout; #endif /** All options from the config file, HTML-formatted. */ -- 2.39.2