⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hostser.ec

📁 证券交易系统
💻 EC
字号:
/* HostSer.c: * * this routine and HostSerDo.c are used for simulate  * the Branch Host * */#include <procinfo.h>#include <fcntl.h>#include <sys/types.h>#include <string.h>#include <stdio.h>#include <signal.h>#include <errno.h>#include <sys/socket.h>#include <sys/time.h>#include <netinet/in.h>#include "../incl/HostSer.h"#include "../incl/bank.h"extern void GetItem(char *sSour, char *sOut, int iNum);int host_ip1;int host_ip2;int host_ip3;int host_ip4;int host_port;long test=1;SEND_NET   send_net;WORKER  *wk;int       htime_out1;int     outloop;$char stockdb1[1024+1];/******JYM     *jym;char    hostlog[30];char    host_ls[7];jmp_buf oldenv;******/extern void pktonet_stock(char * snd_temp);main(argc,argv)int argc;char *argv[];{        int    sockfd,newsockfd,addrlen;        size_t clilen;        int    childpid,Host_code;        char   snd_data_package[1024];	char  package[1024+1];        struct sockaddr_in serv_addr,cli_addr;        int iProcNumber=0;        int iMaxProcNumber=0;        if(argc != 1){            fprintf(stderr,"Usage:HostSer \n");            WriteLog( LOGFILE, "HostSer usage err!");            exit(-1);        }        iMaxProcNumber=GetMaxProcNumber();        if ( iMaxProcNumber < 0 )        {            fprintf(stderr,"GetMaxProcNumber error !\n");            WriteLog( LOGFILE, "GetMaxProcNumber error !");            exit(-1);        }        memset(stockdb1,0,sizeof(stockdb1));        if ( GetDatabaseName(stockdb1) < 0 )        {            fprintf(stderr,"GetDatabaseName error !\n");            WriteLog( LOGFILE, "GetDatabaseName error!");            exit(-1);        }        if ( GetHostCfg() < 0 )        {            fprintf(stderr,"GetHostCfg error !\n");            WriteLog( LOGFILE, "GetHostCfg error!");            exit(-1);        }        if ( init_tohost() < 0 )        {            fprintf(stderr,"init_tohost error !\n");            WriteLog( LOGFILE, "init_tohost error !");            exit(-1);        }        signal(SIGCLD,SIG_IGN);        signal(SIGHUP,SIG_IGN);        signal(SIGPIPE,SIG_IGN);        if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) == -1)        {            fprintf(stderr,"server socket error\n");            WriteLog( LOGFILE, "HostSer Socket err!");            exit(-1);        }                bzero( (char *)&serv_addr,sizeof(serv_addr));        serv_addr.sin_family = AF_INET;        serv_addr.sin_addr.s_addr = INADDR_ANY;        serv_addr.sin_port = htons(PORT);        if ( bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -1 )        {            fprintf(stderr,"HostSer bind error\n");            WriteLog( LOGFILE, "HostSer Socket Band err!");            exit(-1);        }                if ( listen(sockfd,5) == -1)        {            fprintf(stderr,"server listen error\n");            WriteLog( LOGFILE, "HostSer Socket Listen err!");            exit(-1);        }                clilen = sizeof(cli_addr);        fprintf(stderr,"HostSer listening on port %d\n",PORT);        $ connect to  $stockdb1;        if ( sqlca.sqlcode ) {             WriteLog( LOGFILE,                        "Open database stock err![%d]\n",sqlca.sqlcode );             exit( -1 );        }        EXEC SQL UPDATE    t_worker_sign                    SET    on_off = "0";        if(sqlca.sqlcode)        {             WriteLog( LOGFILE,                       "Update database stock err![%d]\n",sqlca.sqlcode );             $ disconnect current;             exit( -1 );        }        $ disconnect current;        if ( sqlca.sqlcode )        {             WriteLog( LOGFILE,                        "close database stock err![%d]\n",sqlca.sqlcode );             exit( -1 );        }        for(;;){          newsockfd = accept(sockfd,(struct sockaddr *)&cli_addr,&clilen);          if ( newsockfd == -1 )          {                 fprintf(stderr,"HostSer accept error:%d\n",errno);                 WriteLog(LOGFILE, "HostSer Socket Accept err!");                 continue;           }                          iProcNumber=GetProcNumber();          WriteLog(LOGFILE,"Current Process Number = [%d]",iProcNumber);          if ( iProcNumber > iMaxProcNumber )          {                 strcpy ( send_net.retcode, "8999" );                 strcpy ( send_net.errmsg,"系统忙,请稍后提交");                 memset(snd_data_package,0,sizeof(snd_data_package));                 pktonet_stock(snd_data_package);                 WriteLog(LOGFILE,                          "系统错误,向代理集中点发送:\n[%s]",snd_data_package);                 SockSnd( newsockfd ,snd_data_package );                 close(newsockfd);                 sleep(1);                 continue;          }/*****	 test++;*****/          if( (childpid=fork())<0 )          {                fprintf(stderr,"HostSer fork error!!!\n");                WriteLog(LOGFILE, "HostSer fork err!");          }          else if( childpid==0 )          {               char out[10] ="10";               setsockopt(newsockfd,SOL_SOCKET,SO_LINGER,out,sizeof(SO_LINGER));               close(sockfd);	       memset(package,0,sizeof(package));	       memset(&send_net,0,sizeof(SEND_NET));               if( HostSerDo(newsockfd,package) == 0)               {                  WriteLog(LOGFILE,"向代理集中点发送:\n[%s]",package);                  SockSnd( newsockfd ,package );               }               else               {		    if ( strlen(send_net.retcode) == 0 )                    {                       strcpy ( send_net.retcode, "8999" );                       strcpy ( send_net.errmsg,"系统错误");                    }                    memset(snd_data_package,0,sizeof(snd_data_package));                    pktonet_stock(snd_data_package);                    WriteLog(LOGFILE,                          "系统错误,向代理集中点发送:\n[%s]",snd_data_package);                    SockSnd( newsockfd ,snd_data_package );               }	       sleep(1);               close(newsockfd);               exit(0);          }          close(newsockfd);        }        end_tohost();        close(sockfd);}void pktonet_stock(char * snd_temp){        int    lenb,len;        int    i;        char   tmp[1024],lenstr[2];        char   *temp;                  memset ( tmp,0,1024 );        temp = tmp;        len = 0;        lenb = strlen(send_net.retcode);        memcpy ( temp,"RETCODE=",8 );        for ( i=0; i<8; i++ ) *temp ++;        memcpy ( temp,send_net.retcode,lenb);        for ( i=0; i<lenb; i++ ) *temp ++;        memcpy ( temp,"|",1 );        *temp++;        len=len+lenb+9;        lenb = strlen(send_net.errmsg);        memcpy ( temp,"ERRMSG=",7 );        for ( i=0; i<7; i++ ) *temp ++;        memcpy ( temp,send_net.errmsg,lenb);        for ( i=0; i<lenb; i++ ) *temp ++;        memcpy ( temp,"|",1 );        *temp ++;        len=len+lenb+8;        temp[len] = '\0';        memcpy  ( snd_temp, "03" , 2 );        sprintf(lenstr,"%2d",len);        memcpy  ( snd_temp+2,lenstr , 2 );        memcpy  ( snd_temp+4,tmp,sizeof(tmp));        return ;}int GetProcNumber(){	int i,count;	pid_t indexPointer;	struct procsinfo procBuff[10];	struct fdsinfo fileBuff[10];	int procSize;	int fileSize;	int rtnNumber;	char *pTemp;	procSize = sizeof(struct procsinfo );	fileSize = sizeof(struct fdsinfo );	indexPointer = 0;	rtnNumber = 10;	count = 0;	while( rtnNumber == 10 )	{		rtnNumber = getprocs(procBuff, procSize,			   fileBuff, fileSize, &indexPointer,10 );		for(i=0;i<rtnNumber;i++)	        if(strcmp(procBuff[i].pi_comm,"HostSer")==0)				count ++;	}	return count;}int GetMaxProcNumber(){   FILE *pFp;   char aczFileName[1024+1];   char aczLine[1024+1];   memset(aczFileName,0,sizeof(aczFileName));   sprintf(aczFileName,"%s/etc/MaxProcNum.cfg",getenv("WORKDIR"));   pFp=fopen(aczFileName,"r");   if ( pFp == NULL ) return -1;   memset(aczLine,0,sizeof(aczLine));   if ( fgets(aczLine,1024,pFp) == NULL )   {      fclose(pFp);      return -1;   }   fclose(pFp);   WriteLog( LOGFILE, "MaxProcNumber=[%d]",atoi(aczLine));   return atoi(aczLine);}int GetDatabaseName(char * pcDatabaseName){   FILE *pFp;   char aczFileName[1024+1];   char aczLine[1024+1];   memset(aczFileName,0,sizeof(aczFileName));   sprintf(aczFileName,"%s/etc/db.cfg",getenv("WORKDIR"));   pFp=fopen(aczFileName,"r");   if ( pFp == NULL ) return -1;   memset(aczLine,0,sizeof(aczLine));   if ( fgets(aczLine,1024,pFp) == NULL )   {      fclose(pFp);      return -1;   }   fclose(pFp);   strncpy(pcDatabaseName,aczLine,strlen(aczLine)-1);   WriteLog( LOGFILE, "DatabaseName=[%s]",pcDatabaseName);   return 0;}int GetHostCfg(){   FILE *pFp;   char aczFileName[1024+1];   char aczLine[1024+1];   char tmp[1024+1];   memset(aczFileName,0,sizeof(aczFileName));   sprintf(aczFileName,"%s/etc/host.cfg",getenv("WORKDIR"));   pFp=fopen(aczFileName,"r");   if ( pFp == NULL ) return -1;   memset(aczLine,0,sizeof(aczLine));   if ( fgets(aczLine,1024,pFp) == NULL )   {      fclose(pFp);      return -1;   }   memset(tmp,0,sizeof(tmp));   GetItem(aczLine,tmp,1);   host_ip1=atoi(tmp);   memset(tmp,0,sizeof(tmp));   GetItem(aczLine,tmp,2);   host_ip2=atoi(tmp);   memset(tmp,0,sizeof(tmp));   GetItem(aczLine,tmp,3);   host_ip3=atoi(tmp);   memset(tmp,0,sizeof(tmp));   GetItem(aczLine,tmp,4);   host_ip4=atoi(tmp);   memset(aczLine,0,sizeof(aczLine));   if ( fgets(aczLine,1024,pFp) == NULL )   {      fclose(pFp);      return -1;   }   host_port=atoi(aczLine);   fclose(pFp);   WriteLog( LOGFILE, "HostCfg=[%d.%d.%d.%d]:[%d]",             host_ip1,             host_ip2,             host_ip3,             host_ip4,             host_port);   return 0;}void GetItem(char *sSour, char *sOut, int iNum){   int iCycleVar;   int iCurNum=0;   int iBegin=0;   for(iCycleVar=0;iCycleVar<strlen(sSour);iCycleVar++)   {      if ( *(sSour+iCycleVar) != '.' )      {         *(sOut+iBegin) = *(sSour+iCycleVar);         iBegin++;      }      else      {         iCurNum ++ ;         if ( iCurNum == iNum ) return;         else         {            iBegin=0;            memset(sOut,0,strlen(sOut));         }      }   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -