diff options
| author | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2001-10-07 17:23:41 +0000 |
|---|---|---|
| committer | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2001-10-07 17:23:41 +0000 |
| commit | dbf027dc0402d94a0da31804edc561ef9dbdeee8 (patch) | |
| tree | 6017b29063d5a95e8f9fd63e68a68a52e4dc3048 /src | |
| parent | 18ee1f33d5218b63003840a50a648af9aa2a95b0 (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.c | 20 | ||||
| -rw-r--r-- | src/zabbix_sucker/zabbix_sucker.c | 31 |
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; } |
