📄 104drv.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 + -