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

📄 emm.c

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 C
📖 第 1 页 / 共 4 页
字号:
			MSL              =5;
		
			rc=setsockopt(g_new_socket_emmg,SOL_SOCKET,SO_KEEPALIVE,(char *)&IsKeepAlvie,sizeof(IsKeepAlvie));
		
			rc=setsockopt(g_new_socket_emmg,IPPROTO_TCP,TCP_KEEPALIVE_CNT,(char *)&KeepAliveCnt ,4);
			rc=setsockopt(g_new_socket_emmg,IPPROTO_TCP,TCP_KEEPALIVE_IDLE,(char *)&KeepAliveIdleTime,sizeof(KeepAliveIdleTime));
			rc=setsockopt(g_new_socket_emmg,IPPROTO_TCP,TCP_KEEPALIVE_INTVL,(char *)&KeepAliveTime,sizeof(KeepAliveTime));
			rc=setsockopt(g_new_socket_emmg,IPPROTO_TCP,TCP_MSL,(char *)&MSL,sizeof(MSL));
#endif
			SendBufLen=4*1024;
			RcvBufLen =32*1024;
			rc=setsockopt(g_new_socket_emmg,SOL_SOCKET,SO_RCVBUF,(char *)&RcvBufLen,4);
			rc=setsockopt(g_new_socket_emmg,SOL_SOCKET,SO_SNDBUF,(char *)&SendBufLen,4);
                     waitTime=0;
		      while(1)
			{
                         if(g_Emmg_connected[1] ==0)
                         {
				close(g_new_socket_emmg);
				g_new_socket_emmg=0;
				bRestart=1;
			       break;		  
                         }
                  	    FD_ZERO (&read_mask);
	                  FD_SET (g_new_socket_emmg, &read_mask);		
	                  wait.tv_sec  = 0;
	                  wait.tv_usec = 1000*1000;
	                  nb = select (FD_SETSIZE, &read_mask, (fd_set *) 0,(fd_set *) 0, &wait);	
	                  if(nb<0)
	             	    {
		              g_Emmg_connected[1] = 0;
				close(g_new_socket_emmg);					  
	             	    }
			    else if(nb==0)
			    {
                               waitTime++;
			          if(waitTime>15)
			          {
		                    g_Emmg_connected[1] = 0;
			          }
			    }	
			    else if(nb>0)
			    {
	                      if (FD_ISSET(g_new_socket_emmg, &read_mask))
	                      {
			             rc=recv(g_new_socket_emmg,emmgrecvbuf,MAX_EMMG_BUFFER_LENGTH,0); 
				      if(rc>0)
				      {
			                 emmg_cmd_proc(emmgrecvbuf,g_new_socket_emmg,rc,1);
					   waitTime=0;
				      }
				     else 
				     	{
		                            g_Emmg_connected[1] = 0;				              
				     	}	
	                      }	  
	                 }
		}

	}
   }	


void tk_emmgMgr2(void)
{
	int		g_new_socket_emmg=0;

	struct 	sockaddr_in   g_EcmgAddr;
	int     g_EcmgAddrLen;

	int		i;
	struct 	sockaddr_in   MuxAddr;

	int				rc;
	unsigned long	Msg[4];

	int				MsgLen=0;

	unsigned long   RcvBufLen,SendBufLen;
	unsigned long   IsKeepAlvie;

	unsigned long   KeepAliveCnt;
	unsigned long   KeepAliveIdleTime;
	unsigned long   KeepAliveTime;

	unsigned long   MSL;

	int     iCurConnect;

	int     RecvSockId;
	struct timeval wait;
	int nb;
	static int  isFirst = 0;
	static int bRestart =0 ;
	int index;
      char  emmgrecvbuf[MAX_EMMG_BUFFER_LENGTH];
	fd_set read_mask;
       unsigned long int waitTime=0;
	 while(1)
	 {
	       if(g_new_socket_emmg)
	     	{
                    close(g_new_socket_emmg);
	     	}	
		
		if(g_socket_emmg2)
		{/*如为真,则关闭套接口*/
			close(g_socket_emmg2);
			g_socket_emmg2 = 0;
		}
		 g_Emmg_connected[2] = 0;

		/*创建套接口*/
		g_socket_emmg2 = socket(AF_INET, SOCK_STREAM, TCP);
		if(g_socket_emmg1 == -1) 
		{
			Display("emmg2: Socket create error, error code=0x%x.\r\n",errno);
			close(0);
			tm_wkafter(10);/*by xu*/
			continue;
		}
		Display("emmg2: Socket create ok!\r\n");
			 		
		MuxAddr.sin_family		= AF_INET;
		MuxAddr.sin_port		= htons(g_ca_config.Para_Config[2].EMMG_Port);			 
		MuxAddr.sin_addr.s_addr = htonl(INADDR_ANY);	 
		for(i=0;i<8;i++)
			MuxAddr.sin_zero[i] = 0;					 

		/*绑定地址及端口号*/
		rc = bind(g_socket_emmg2, (struct sockaddr *)&MuxAddr, sizeof(MuxAddr));
		if(rc == -1)
		{
			close(0);
			Display("emmg2: Bind error, socket=%d,error code=0x%x.\r\n",g_socket_emmg2,errno);
			tm_wkafter(10);/*by xu*/
			continue;
		}
		Display("emmg2:Bind ok!\r\n");
		break;
	 }		
	 while(1)
	 {
		/*启动监听*/
		rc = listen(g_socket_emmg2,1);
		if(rc == -1)
		{
			close(0);
			Display("emmg2: Listen error, socket=%d,error code=0x%x.\r\n",g_socket_emmg2,errno);
			tm_wkafter(10);/*by xu*/
			continue;
		}
		else
		{
			Display("emmg2: listen ok!\r\n");
		}

             g_EcmgAddrLen=sizeof(struct 	sockaddr_in);

		/*接收连接事件*/
		/*Display1("Start to Listen the connect!");*/
		   waitTime=0;
	 	    while((g_new_socket_emmg = accept(g_socket_emmg, (struct sockaddr *)&g_EcmgAddr, &g_EcmgAddrLen)) == -1)
		    {
			 Display("emmg: Accept error,error code=0x%x.\r\n",errno);
			 tm_wkafter(10);/*by xu*/
			 waitTime++;
			 if(waitTime>20)
			 {
                           break;
			 }
			 continue;
		    }
		   if(waitTime>20)
		   {
                      continue;
		   }
		    waitTime=0;			
		       g_Emmg_connected[2] = 1;
			Display("emmg2: Accept ok,start to receive message!\r\n");
#if 0
			IsKeepAlvie=1;
			KeepAliveCnt     =2;
			KeepAliveIdleTime=5;
			KeepAliveTime    =5;

			MSL              =5;
		
			rc=setsockopt(g_new_socket_emmg,SOL_SOCKET,SO_KEEPALIVE,(char *)&IsKeepAlvie,sizeof(IsKeepAlvie));
		
			rc=setsockopt(g_new_socket_emmg,IPPROTO_TCP,TCP_KEEPALIVE_CNT,(char *)&KeepAliveCnt ,4);
			rc=setsockopt(g_new_socket_emmg,IPPROTO_TCP,TCP_KEEPALIVE_IDLE,(char *)&KeepAliveIdleTime,sizeof(KeepAliveIdleTime));
			rc=setsockopt(g_new_socket_emmg,IPPROTO_TCP,TCP_KEEPALIVE_INTVL,(char *)&KeepAliveTime,sizeof(KeepAliveTime));
			rc=setsockopt(g_new_socket_emmg,IPPROTO_TCP,TCP_MSL,(char *)&MSL,sizeof(MSL));
#endif
			SendBufLen=4*1024;
			RcvBufLen =32*1024;
			rc=setsockopt(g_new_socket_emmg,SOL_SOCKET,SO_RCVBUF,(char *)&RcvBufLen,4);
			rc=setsockopt(g_new_socket_emmg,SOL_SOCKET,SO_SNDBUF,(char *)&SendBufLen,4);

			waitTime=0;

/*以下做法导致只能进行一个连接*/
			while(1)
			{
                        if(g_Emmg_connected[2] ==0)
                        {
				close(g_new_socket_emmg);
				g_new_socket_emmg=0;
				bRestart=1;
			       break;		  
                        }
                 	    FD_ZERO (&read_mask);
	                  FD_SET (g_new_socket_emmg, &read_mask);	
	                  wait.tv_sec  = 0;
	                  wait.tv_usec = 1000*1000;
			    
	                  nb = select (FD_SETSIZE, &read_mask, (fd_set *) 0,(fd_set *) 0, &wait);	
	                  if(nb<0)
	             	    {
		              g_Emmg_connected[2] = 0;
				close(g_new_socket_emmg);
	             	    }
			    else if(nb==0)
			    {
                              waitTime++;
				   if(waitTime>15)
				   {
		                       g_Emmg_connected[2] = 0;
				   }
			    }	
			   else 
			   {
	                    if (FD_ISSET(g_new_socket_emmg, &read_mask))
	                    {
			           rc=recv(g_new_socket_emmg,emmgrecvbuf,MAX_EMMG_BUFFER_LENGTH,0); 
				    if(rc>0)
				    {
					   emmg_cmd_proc(emmgrecvbuf,g_new_socket_emmg,rc,2);
					   waitTime=0;
				   }		  
				   else
				   {
		                     g_Emmg_connected[2] = 0;
				      close(g_new_socket_emmg);
				   }
	                     }
			   }				
					 
			}

	    }
	}


void TkEmmTcpEntry(void)
{
	int rc;
	char  EmmgRecvBuf[MAX_EMMG_BUFFER_LENGTH];

	while(1)
	{
		if(!g_Emm_TcpMember[0].ucHadConnected)
		{
			if(g_Emm_TcpMember[0].RecvEmmSocket)
				close(g_Emm_TcpMember[0].RecvEmmSocket);
			Display1("exit the EMM Task 0!");
			break;
		}

		rc = recv(g_Emm_TcpMember[0].RecvEmmSocket,EmmgRecvBuf,MAX_EMMG_BUFFER_LENGTH,0);
		if(rc<= 0)
		{
			Display1("Close the EMM Socket index:%d",0);
			close(g_Emm_TcpMember[0].RecvEmmSocket);
			g_Emm_TcpMember[0].RecvEmmSocket= 0;
			g_Emm_TcpMember[0].ucHadConnected = 0;
			break;
		}
/*		Display1("Reveive Emmg Data,index:%d",0);	*/
		emmg_cmd_proc(EmmgRecvBuf,g_Emm_TcpMember[0].RecvEmmSocket,rc,0);
	}
}

void TkEmmTcpEntry1(void)
{
	int rc;
	char  EmmgRecvBuf[MAX_EMMG_BUFFER_LENGTH];

	while(1)
	{
		if(!g_Emm_TcpMember[1].ucHadConnected)
		{
			if(g_Emm_TcpMember[1].RecvEmmSocket)
				close(g_Emm_TcpMember[1].RecvEmmSocket);
			Display1("exit the EMM Task 1!");
			break;
		}

	/*	Display1("Start receive Data,index:%d",1);	*/
		rc = recv(g_Emm_TcpMember[1].RecvEmmSocket,EmmgRecvBuf,MAX_EMMG_BUFFER_LENGTH,0);
		if(rc<= 0)
		{
			Display1("Close the EMM Socket index:%d",1);
			close(g_Emm_TcpMember[1].RecvEmmSocket);
			g_Emm_TcpMember[1].RecvEmmSocket= 0;
			g_Emm_TcpMember[1].ucHadConnected = 0;
			break;
		}
/*		Display1("Reveive Emmg Data,index:%d",1);*/
		emmg_cmd_proc(EmmgRecvBuf,g_Emm_TcpMember[1].RecvEmmSocket,rc,1);
	/*	Display1("Deal EMM Data End,index:%d",1);  */
	}
}

#if 1
void TkEmmTcpEntry2(void)
{
	int rc;
	char  EmmgRecvBuf[MAX_EMMG_BUFFER_LENGTH];

	while(1)
	{
		if(!g_Emm_TcpMember[2].ucHadConnected)
		{
			if(g_Emm_TcpMember[2].RecvEmmSocket)
				close(g_Emm_TcpMember[2].RecvEmmSocket);
			Display1("exit the EMM Task 2!");			
			break;
		}
/*		Display1("Start receive Data,index:%d",2);	*/		
		rc = recv(g_Emm_TcpMember[2].RecvEmmSocket,EmmgRecvBuf,MAX_EMMG_BUFFER_LENGTH,0);
		if(rc<= 0)
		{
			Display1("Close the EMM Socket index:%d",2);
			close(g_Emm_TcpMember[2].RecvEmmSocket);
			g_Emm_TcpMember[2].RecvEmmSocket= 0;
			g_Emm_TcpMember[2].ucHadConnected = 0;
			break;
		}
	/*	Display1("Reveive Emmg Data,index:%d",2);*/
		emmg_cmd_proc(EmmgRecvBuf,g_Emm_TcpMember[2].RecvEmmSocket,rc,2);
	}
}
#else
void TkEmmTcpEntry2(void)
{
	struct timeval wait;
	int nb;
	int rc;

	int index;
	int HadConnect = 0;
	fd_set   tread_mask;

	char  EmmgRecvBuf[MAX_EMMG_BUFFER_LENGTH];

	while(1)
	{
		if(!g_Emm_TcpMember[2].ucHadConnected)
		{
			if(g_Emm_TcpMember[2].RecvEmmSocket)
			{
				close(g_Emm_TcpMember[2].RecvEmmSocket);
				g_Emm_TcpMember[2].RecvEmmSocket = 0;
				g_Emm_TcpMember[2].ucHadConnected = 0;
				g_Emm_TcpMember[2].ulClientId = 0;
				break;
			}
		}

		/*等待200毫秒*/
		wait.tv_sec = 0;
		wait.tv_usec = 200*1000;

	       FD_ZERO(&tread_mask);   
		FD_SET(g_Emm_TcpMember[2].RecvEmmSocket,&tread_mask); 
	
		nb = select(FD_SETSIZE,&tread_mask,(fd_set *)0,(fd_set *)0,&wait);
		if(nb ==0)
		{
			Display("EMMG Receive Timeout!");
			continue;
		}
		if(nb <0)
		{
			Display("EMMG Multi I/O Error!");
			break;
		}

	/*	Display("Emmg Return nb:%d!",nb);*/
		if(FD_ISSET(g_Emm_TcpMember[2].RecvEmmSocket,&tread_mask))
		{
			Display1("Reveive Emmg Data,index:%d",0);
			rc = recv(g_Emm_TcpMember[2].RecvEmmSocket,EmmgRecvBuf,MAX_EMMG_BUFFER_LENGTH,0);
			if(rc<= 0)
			{
				Display1("Close the EMM Socket index:%d",2);
				close(g_Emm_TcpMember[2].RecvEmmSocket);
				g_Emm_TcpMember[2].RecvEmmSocket= 0;
				g_Emm_TcpMember[2].ucHadConnected = 0;
			}
			emmg_cmd_proc(EmmgRecvBuf,g_Emm_TcpMember[2].RecvEmmSocket,rc,2);
		}
	}
}
#endif

⌨️ 快捷键说明

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