📄 c7db_receive.c
字号:
#include "./common/common.h"
#include "./common/sybfunc.c"
#include "./common/commonfunc.c"
struct shmem *shm_p;struct sockaddr_in rx_addr; //inet recieve address struct for father and child1, child2
int sockrxfd, socktxfd; //socket id for father and child1, child2int logflag, dbgflag;char errtxt[1024];
char sqlstr[1024],tempstr[100];
DBPROCESS *grs_svr;
RETCODE result_code;
LOGINREC *login;struct ne *nePtr;long msucounter;struct shmem* SetShm(struct shmem* shm_pTMP,char *KeyPath,char KeyId){ key_t key; int shmid; key = ftok(KeyPath, KeyId); printf("\nKEYID:%c,key:%d\n",KeyId,key); shmid = shmget(key, sizeof(struct shmem), IPC_CREAT|PERMS); if(shmid < 0) { printf("\n shmid < 0\n"); exit(1); } shm_pTMP = shmat(shmid, 0, 0); if(shm_pTMP < 0) { printf("\n shm_p < 0"); exit(-1); } memset(shm_pTMP, 0, sizeof(struct shmem)); return(shm_pTMP);}void release_shm(struct shmem* shm_pTMP,char *KEYPATH,char KEYID){ struct shmid_ds shm_desc; key_t key; int shmid; key = ftok(KEYPATH, KEYID); shmid = shmget(key, sizeof(struct shmem), 0); if(shmid < 0) { perror("release_shm: shmid:"); } if (shmdt(shm_pTMP) == -1){ perror("release_shm: shmdt:"); } if (shmctl(shmid,IPC_RMID,&shm_desc) == -1){ perror("release_shm: shmctl:"); }}void house_keeper(int sig_num){ printf("\nClearing share memory and malloced memory.\n"); //free(nePtr); //the pointer to struct ne,this is not a share memory //if(grs_svr>0)db_disconnect(grs_svr); release_shm(shm_p,"/usr/mbcp/",'e'); printf("\nNow exit safely.\n"); exit (0);}
main(int argc,char **argv)
{
FILE* fd; unsigned char buffer[MAXLINE]; int retval,nenum; unsigned char curtime[256]; int i, j, k, m,l,n; long overflow,counter; int overflag,emptyflag,sqlflag,shmflag,shmflag_tmp; time_t tempt,ltime; float msucnt; char callingaddr[20],calledaddr[20],GRS_DB[50]; int errflag; FILE *msufd; signal(SIGINT, house_keeper); logflag = 0; dbgflag = 0; nenum = 0; bzero(tempstr,100); if(argc==2){ strcpy(tempstr,argv[1]); if(strcmp(tempstr,"debug")==0) dbgflag=1; }else if (argc!=2){ printf("\nusage:c7db_receive debug|free\n"); exit (0); } shm_p=SetShm(shm_p,"/usr/mbcp/",'e'); if((sockrxfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { if(logflag) monitor(LOGFILE, "Can not create rxsocket", LOGNAME); if(dbgflag) printf("\nCan not create rxsocket\n"); fflush(stdout); exit(-1); } bzero(&rx_addr, sizeof(rx_addr)); rx_addr.sin_family = AF_INET; rx_addr.sin_addr.s_addr = htonl(INADDR_ANY); rx_addr.sin_port = htons(6200); if(bind(sockrxfd, (struct sockaddr *)&rx_addr, sizeof(rx_addr)) < 0) { if(logflag) monitor(LOGFILE, "Can not bind rxsocket", LOGNAME); if(dbgflag) printf("\nCan not bind rxsocket\n"); fflush(stdout); exit(-1); } bzero(buffer,MAXLINE); db_init(); msucounter = 0; for(;;){ bzero(buffer, MAXLINE); shmflag = 0; if(recvfrom(sockrxfd, buffer, MAXLINE, 0, (struct sockaddr *)0, (int *)0) < 0){ continue; } if (dbgflag) printf("\nbuffer:%s",buffer); //if(strlen(buffer) > 300) continue; msucounter ++; i = gettoken(buffer,':'); //imsi if(i<0) continue; strncpy(shm_p->buffer[shm_p->wp].imsi, buffer, i); shm_p->buffer[shm_p->wp].imsi[i] = 0; strcpy(shm_p->buffer[shm_p->wp].ci, buffer+i+1); shm_p->buffer[shm_p->wp].ci[4]=0; if (dbgflag){ printf("\ndebug: a%sa\n",shm_p->buffer[shm_p->wp].ci); fflush(stdout); if(strcmp(shm_p->buffer[shm_p->wp].ci,"5011")==0){ printf("\ndumping 5011\n"); fflush(stdout); monitor("/opt/5011dump.log", buffer, "msudump"); } } counter = shm_p->wp; counter ++; if(counter >= MAXSLOT) counter = 0; if(counter != shm_p->rp) shm_p->wp = counter; } free(nePtr);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -