diff options
| author | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2002-02-27 19:06:39 +0000 |
|---|---|---|
| committer | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2002-02-27 19:06:39 +0000 |
| commit | f681eb47ea19082ec25265b6b1622fe7f688c47c (patch) | |
| tree | 2dc0718e8119d7a994650a3d7f944a19bb9c9ae1 /src | |
| parent | f16cd27243ef70994ccdc90580cde57f7d0bfbe1 (diff) | |
| download | zabbix-f681eb47ea19082ec25265b6b1622fe7f688c47c.tar.gz zabbix-f681eb47ea19082ec25265b6b1622fe7f688c47c.tar.xz zabbix-f681eb47ea19082ec25265b6b1622fe7f688c47c.zip | |
- support for experimental parameter NoTimeWait (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@326 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src')
| -rw-r--r-- | src/zabbix_agent/zabbix_agentd.c | 29 | ||||
| -rw-r--r-- | src/zabbix_sucker/zabbix_sucker.c | 27 |
2 files changed, 52 insertions, 4 deletions
diff --git a/src/zabbix_agent/zabbix_agentd.c b/src/zabbix_agent/zabbix_agentd.c index 328aea6a..786d488c 100644 --- a/src/zabbix_agent/zabbix_agentd.c +++ b/src/zabbix_agent/zabbix_agentd.c @@ -45,6 +45,7 @@ int stats_request=0; char *CONFIG_HOST_ALLOWED=NULL; char *CONFIG_PID_FILE=NULL; int CONFIG_AGENTD_FORKS=AGENTD_FORKS; +int CONFIG_NOTIMEWAIT=0; int CONFIG_LISTEN_PORT=10000; void uninit(void) @@ -237,6 +238,17 @@ void process_config_file(void) { CONFIG_PID_FILE=strdup(value); } + else if(strcmp(parameter,"NoTimeWait")==0) + { + i=atoi(value); + if( (i<0) || (i>1) ) + { + syslog( LOG_CRIT, "Wrong value of NoTimeWait in line %d. Should be either 0 or 1.", lineno); + fclose(file); + exit(1); + } + CONFIG_NOTIMEWAIT=i; + } else if(strcmp(parameter,"StartAgents")==0) { i=atoi(value); @@ -334,9 +346,9 @@ int check_security(int sockfd) } else { - syslog( LOG_WARNING, "Error getpeername [%m]"); +/* syslog( LOG_WARNING, "Error getpeername [%m]"); syslog( LOG_WARNING, "Connection rejected"); - return FAIL; + return FAIL;*/ } return SUCCEED; } @@ -392,12 +404,25 @@ int tcp_listen(const char *host, int port, socklen_t *addrlenp) int sockfd; struct sockaddr_in serv_addr; + struct linger ling; + if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { syslog( LOG_CRIT, "Unable to create socket"); exit(1); } + if(CONFIG_NOTIMEWAIT == 1) + { + ling.l_onoff=1; + ling.l_linger=0; + if(setsockopt(sockfd,SOL_SOCKET,SO_LINGER,&ling,sizeof(ling))==-1) + { + syslog(LOG_WARNING, "Cannot setsockopt SO_LINGER [%m]"); + } + } + + bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); diff --git a/src/zabbix_sucker/zabbix_sucker.c b/src/zabbix_sucker/zabbix_sucker.c index 44d98154..0c4567f8 100644 --- a/src/zabbix_sucker/zabbix_sucker.c +++ b/src/zabbix_sucker/zabbix_sucker.c @@ -41,6 +41,7 @@ static pid_t *pids=NULL; int sucker_num=0; int CONFIG_SUCKERD_FORKS =SUCKER_FORKS; +int CONFIG_NOTIMEWAIT =0; int CONFIG_HOUSEKEEPING_FREQUENCY = 1; static char *CONFIG_PID_FILE = NULL; char *CONFIG_DBNAME = NULL; @@ -270,6 +271,17 @@ void process_config_file(void) } CONFIG_SUCKERD_FORKS=i; } + else if(strcmp(parameter,"NoTimeWait")==0) + { + i=atoi(value); + if( (i<0) || (i>1) ) + { + syslog( LOG_CRIT, "Wrong value of NoTimeWait in line %d. Should be either 0 or 1", lineno); + fclose(file); + exit(1); + } + CONFIG_NOTIMEWAIT=i; + } else if(strcmp(parameter,"HousekeepingFrequency")==0) { i=atoi(value); @@ -482,8 +494,9 @@ int get_value_zabbix(double *result,char **result_str,DB_ITEM *item) struct sockaddr_in myaddr_in; struct sockaddr_in servaddr_in; - syslog( LOG_DEBUG, "%10s%25s", item->host, item->key ); + struct linger ling; + syslog( LOG_DEBUG, "%10s%25s", item->host, item->key ); servaddr_in.sin_family=AF_INET; if(item->useip==1) @@ -506,6 +519,16 @@ int get_value_zabbix(double *result,char **result_str,DB_ITEM *item) servaddr_in.sin_port=htons(item->port); s=socket(AF_INET,SOCK_STREAM,0); + + if(CONFIG_NOTIMEWAIT == 1) + { + ling.l_onoff=1; + ling.l_linger=0; + if(setsockopt(s,SOL_SOCKET,SO_LINGER,&ling,sizeof(ling))==-1) + { + syslog(LOG_WARNING, "Cannot setsockopt SO_LINGER [%m]"); + } + } if(s==0) { syslog(LOG_WARNING, "Cannot create socket [%m]"); @@ -566,7 +589,7 @@ int get_value_zabbix(double *result,char **result_str,DB_ITEM *item) close(s); return FAIL; } - + if( close(s)!=0 ) { syslog(LOG_WARNING, "Problem with close [%m]"); |
