summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2002-02-27 19:06:39 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2002-02-27 19:06:39 +0000
commitf681eb47ea19082ec25265b6b1622fe7f688c47c (patch)
tree2dc0718e8119d7a994650a3d7f944a19bb9c9ae1 /src
parentf16cd27243ef70994ccdc90580cde57f7d0bfbe1 (diff)
downloadzabbix-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.c29
-rw-r--r--src/zabbix_sucker/zabbix_sucker.c27
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]");