summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2001-10-07 17:23:41 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2001-10-07 17:23:41 +0000
commitdbf027dc0402d94a0da31804edc561ef9dbdeee8 (patch)
tree6017b29063d5a95e8f9fd63e68a68a52e4dc3048 /src
parent18ee1f33d5218b63003840a50a648af9aa2a95b0 (diff)
- changes in timeout handling (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@235 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src')
-rw-r--r--src/zabbix_agent/zabbix_agentd.c20
-rw-r--r--src/zabbix_sucker/zabbix_sucker.c31
2 files changed, 36 insertions, 15 deletions
diff --git a/src/zabbix_agent/zabbix_agentd.c b/src/zabbix_agent/zabbix_agentd.c
index 51c63ae0..67b3159c 100644
--- a/src/zabbix_agent/zabbix_agentd.c
+++ b/src/zabbix_agent/zabbix_agentd.c
@@ -134,16 +134,28 @@ void process_child(int sockfd)
char result[1024];
double res;
+ struct sigaction phan;
+
for(;;)
{
-// sigfunc = signal( SIGALRM, signal_handler );
-// alarm(AGENT_TIMEOUT);
+ phan.sa_handler = &signal_handler; /* set up sig handler using sigaction() */
+ sigemptyset(&phan.sa_mask); /* just block alarm signal */
+ phan.sa_flags = 0;
+// phan.sa_flags = SA_RESTART;
+ sigaction(SIGALRM, &phan, NULL);
+ alarm(AGENT_TIMEOUT);
+//
+
if( (nread = read(sockfd, line, 1024)) == 0)
+ {
+ syslog( LOG_DEBUG, "read() faied. Timeout ?\n");
return;
+ }
+
+ phan.sa_handler = SIG_IGN; /* just ignore signal now */
+ sigaction(SIGALRM, &phan, NULL);
-// alarm(0);
-// signal(SIGALRM, sigfunc);
line[nread-1]=0;
diff --git a/src/zabbix_sucker/zabbix_sucker.c b/src/zabbix_sucker/zabbix_sucker.c
index 5e2f43af..95705924 100644
--- a/src/zabbix_sucker/zabbix_sucker.c
+++ b/src/zabbix_sucker/zabbix_sucker.c
@@ -206,6 +206,8 @@ int get_value_zabbix(double *result,DB_ITEM *item)
char *e;
void *sigfunc;
+ struct sigaction phan;
+
struct hostent *hp;
struct sockaddr_in myaddr_in;
@@ -213,6 +215,20 @@ int get_value_zabbix(double *result,DB_ITEM *item)
syslog( LOG_DEBUG, "%10s%25s", item->host, item->key );
+
+
+ phan.sa_handler = &signal_handler; /* set up sig handler using sigaction() */
+ sigemptyset(&phan.sa_mask); /* just block alarm signal */
+ phan.sa_flags = 0;
+// phan.sa_flags = SA_RESTART;
+ sigaction(SIGALRM, &phan, NULL);
+ alarm(1);
+
+
+
+
+
+
servaddr_in.sin_family=AF_INET;
if(item->useip==1)
{
@@ -244,18 +260,12 @@ int get_value_zabbix(double *result,DB_ITEM *item)
myaddr_in.sin_port=0;
myaddr_in.sin_addr.s_addr=INADDR_ANY;
- sigfunc = signal( SIGALRM, signal_handler );
-
- alarm(SUCKER_TIMEOUT);
-
if( connect(s,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)) == -1 )
{
syslog( LOG_WARNING, "Problem with connect" );
close(s);
return FAIL;
}
- alarm(0);
- signal( SIGALRM, sigfunc );
sprintf(c,"%s\n",item->key);
if( sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)) == -1 )
@@ -266,9 +276,6 @@ int get_value_zabbix(double *result,DB_ITEM *item)
}
i=sizeof(struct sockaddr_in);
- sigfunc = signal( SIGALRM, signal_handler );
- alarm(SUCKER_TIMEOUT);
-
i=recvfrom(s,c,1023,0,(struct sockaddr *)&servaddr_in,&i);
if(i==-1)
{
@@ -276,8 +283,6 @@ int get_value_zabbix(double *result,DB_ITEM *item)
close(s);
return FAIL;
}
- alarm(0);
- signal( SIGALRM, sigfunc );
if( close(s)!=0 )
{
@@ -303,6 +308,10 @@ int get_value_zabbix(double *result,DB_ITEM *item)
return FAIL;
}
}
+
+ phan.sa_handler = SIG_IGN; /* just ignore signal now */
+ sigaction(SIGALRM, &phan, NULL);
+
return SUCCEED;
}