📄 emm.c
字号:
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 + -