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

📄 104drv.c

📁 IEC104程序元源代码
💻 C
字号:
/*   dlserver.c  4.2  04/15/99 *********************************************************************** *                          NARI   Software                            * *            Automatic Realtime Remote Interface software             * *           Copyright (c) 1998,1999 NARI P.R.C                        * *                        All Rights Reserved                          * *                                                                     * *                                                                     * * Name        : dlserver.c                                            * *                                                                     * * Programmer  : NARI                                                  * *                                                                     * * Decsription : the server process of net104 protocol                 * *                                                                     * ***********************************************************************/#include     "104def.h"#include     "ipdef.h"extern   void exit_exe();extern   void server_act();char   hostname[NAME_SIZE];char   myprocessname[NAME_SIZE];char   mynodename[NAME_SIZE];int            MyByteOrder;char           Link_Num;void  main(argc,argv)int  argc;char  *argv[];{     int  pid,w_code,code;     pid_t  pidd;     int    *stat;     int  i,j,length;     int  sock_fd,lansock,display;     struct sockaddr_in  sockaddr,from,from1;     pidd=-1;     stat=&code;     strcpy( myprocessname,argv[0] );     if (InitSharedMemory() == -1) {          printf("InitSharedMemory Failure---%s\n",argv[0]);          exit(0);     }     if (gethostname (hostname,NAME_SIZE)) {          printf ("ERR -- 104drv : Get host name fail\n");          exit_exe();     }     if (get_local_aliasname(mynodename) == -1) {          printf("ERR -- 104drv : get_local_aliasname Failure---%s\n",argv[0]);          exit_exe();     }     if (msg_init( myprocessname ) < 0) {          printf("104drv -- msg_init fail\n");          exit_exe();     }     MyByteOrder = get_byte_order( hostname );     init_sighandler();     Link_Num=0;     if ( (argc==2) && (strcmp(argv[1],"on")==0) ) display = 1;     sockaddr.sin_addr.s_addr = INADDR_ANY;     sockaddr.sin_family = AF_INET;     sockaddr.sin_port = htons(SOCKET_PORT_NO);   sock_fd=socket(AF_INET,SOCK_STREAM,0);   length=sizeof(sockaddr);   if(bind(sock_fd,(struct sockaddr *)&(sockaddr),length)==-1){     printf("ERR--net104 bind fail!%s.\n",sys_errlist[errno]);     close (sock_fd);     exit_exe();   }   listen (sock_fd,5);   while(1){/*      if(get_redundant_flag(hostname)==0){        sleep(1);        printf("node-------\n");        continue;      }*/      lansock = accept(sock_fd,(struct sockaddr *)&(from),&length);      if(lansock==-1){         printf("ERR--net104 main:accept fail!\n");         continue;      }/*      else if(get_redundant_flag(hostname)==0){        sleep(1);        close(lansock);        continue;      } */      i=0;      while(strcmp(ipdef[i].net_node_name,"")){           from1.sin_addr.s_addr=inet_addr(ipdef[i].net_node_name);           from1.sin_addr.s_addr&=from.sin_addr.s_addr;           if(from1.sin_addr.s_addr==from.sin_addr.s_addr)break;           i++;      }      if(!strcmp(ipdef[i].net_node_name,"")){        sleep(1);        close(lansock);        printf("ipaddr %d.%d.%d.%d  is not defined!\n",(from.sin_addr.s_addr)&0xff,              (from.sin_addr.s_addr>>8)&0xff,(from.sin_addr.s_addr>>16)&0xff,(from.sin_addr.s_addr>>24)&0xff);        continue;      }      printf("net104:lansock=%d,IP=%d.%d.%d.%d:%d\n",lansock,(from.sin_addr.s_addr)&0xff,(from.sin_addr.s_addr>>8)&0xff,                     (from.sin_addr.s_addr>>16)&0xff,(from.sin_addr.s_addr>>24)&0xff, from.sin_port);      pid=fork();      if(pid==-1){        printf("ERR--net104 main:fork fail!\n");      }else if(pid==0){         close(sock_fd);         server_act(lansock,display);      }else {            close(lansock);            w_code=1;            for(;;){               w_code=waitpid(pidd,stat,WNOHANG);               if(w_code<1)break;            }      }   }   close(sock_fd);   shutdown(sock_fd,2);}

⌨️ 快捷键说明

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