📄 hc_main.c
字号:
/** Copyright (c) 2004,wuxi xietong tech corp* All rights reserved.** filename:hc_main.c* content :1. exec all the server.* 2. watchdog for HC** version :2.0* author :hwz* date :2004/03/01**/#include "common.h"#include "hc.h"#define HC_CHILD_SERV_CNT 1 char *hc_server_name[] = { "rs232", "ping", NULL};int sock_dog;struct sockaddr_un addr_rec;struct sockaddr_un addr_ping;int main(int argc, char *argv[]){ char pname[64], *ptr; int fd; int on=1, ret, count; int pid, index, maxfd; fd_set readfds; struct sockaddr_un addr_un; struct hc_event_msg_str msg; struct timeval timev, timev2; err_dump_init(HC_MAIN_LOG); zx_daemon(); set_sighandler(); hc_global_init(); hc_global_init2(); index = 0; while( hc_server_name[index]!= NULL ){ if( argv[0][0]=='/' ){ strcpy(pname, argv[0]); ptr = strrchr(pname, '/'); ptr[1] = '\0'; }else if( strrchr(argv[0], '/')==NULL ){ pname[0] = '\0'; }else{ ptr = getenv("PWD"); strcpy(pname, ptr); strcat(pname, "/"); strcat(pname, argv[0]); ptr = strrchr(pname, '/'); ptr[1] = '\0'; } strcat(pname, hc_server_name[index]); err_dump(PRINT_ERROR, "exec[%d]: %s \n", index, pname); pid = fork(); if( pid==0 ){ err_dump_close(); execlp(pname, hc_server_name[index], NULL); ERR_DUMP(); exit(-1); } bzero(pname,64); index ++; } unlink(HC_EVENT_WTDOG_SOCK); sock_dog = socket(PF_UNIX, SOCK_DGRAM, 0); setsockopt(sock_dog, SOL_SOCKET, SO_REUSEADDR,(char *)&on, sizeof(on)); addr_un.sun_family = AF_UNIX; strcpy(addr_un.sun_path, HC_EVENT_WTDOG_SOCK); ret = bind(sock_dog, (struct sockaddr *)&addr_un, sizeof(addr_un)); if( ret<0 ){ ERR_DUMP(); exit(-1); }/* Set event address(5, one for each server) */ addr_rec.sun_family = AF_UNIX; strcpy(addr_rec.sun_path, HC_EVENT_GENERAL_SOCK);// addr_ping.sun_family = AF_UNIX;// strcpy(addr_ping.sun_path,HC_KEY_SOCK); sleep(10); gettimeofday(&timev, NULL); fd = open(DEV_NAME_WTDOG, O_WRONLY); if( fd<0 ){ ERR_DUMP(); //exit(-1); } DEBUG_DUMP("Begin while ..."); while(1){ msg.type = HC_EVENT_TYPE_DOG; msg.event_dog = HC_EVENT_DOG_MAGIC; sendto( sock_dog, (void *)&msg, sizeof(msg), 0, (struct sockaddr *)&addr_rec, sizeof(addr_rec) ); // sendto( sock_dog, (void *)&msg, sizeof(msg), 0,// (struct sockaddr *)&addr_ping, sizeof(addr_ping) ); count = HC_CHILD_SERV_CNT; while(1){ FD_ZERO(&readfds); FD_SET(sock_dog, &readfds); maxfd = sock_dog; ret = select(maxfd+1, &readfds, NULL, NULL, NULL); if( ret<=0 ){ ERR_DUMP(); continue; } if( !FD_ISSET(sock_dog, &readfds) ) continue; ret = recvfrom( sock_dog, (char *)&msg, sizeof(msg), 0, NULL, NULL ); if( ret!=sizeof(msg) ){ ERR_DUMP(); continue; } if( msg.type!=HC_EVENT_TYPE_DOG ) continue; if( msg.event_dog != HC_EVENT_DOG_MAGIC ) continue; count --; if( count==0 ){ /* avoid probe event too frequent */ gettimeofday(&timev2, NULL); if( timev2.tv_sec-timev.tv_sec < 10 ) sleep( 10-(timev2.tv_sec-timev.tv_sec) ); gettimeofday(&timev, NULL); err_dump(PRINT_ERROR,"***********is break\n"); /* Feed watch dog */ write(fd, NULL, 0); break; } } } close(fd); close(sock_dog);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -