📄 srv_s1_song1.c
字号:
/********************************************************************
* NAME : SRV_S1_song1.c
* FUNCTION :
* AUTHOR : ZZ-NODE/2000.12.21/songqufei
* OS : solaris
********************************************************************/
/********************************************************************
* INCLUDE FILES
********************************************************************/
#include "SRV_S1_song1.h"
/********************************************************************
* 全局变量定义
********************************************************************/
int sockID; /* socket ID */
/********************************************************************
* 内部函数
********************************************************************/
void SRV_S1_signalexit();
/********************************************************************
* NAME : main()
* FUNCTION : main function of SRV_S1_song1 program
* PROCESS : 1.initialize socket
* : 2.send 身份信息 to 系统管理进程
* INPUT : argv[1] : offinum
* : argv[2] : JF machine IP
* : argv[3] : JF socket
* OUTPUT :
* AUTHOR : ZZ-NODE/2000.12.21/songqufei
* CALL : signal()
* : TCFVInitialize()
* : TCFVProcess()
********************************************************************/
void main(int argc,char *argv[])
{
sockID = -1;
sockID = atoi(argv[1]);
strcpy(szSystemID,SYSTEM_ID);
strcpy(szSubSystemID,SUBSYS_SV_SONG_1);
giOutputLog = DebugLogOutputCtrl(argv[0]);
if(argc<2) {
DebugLog("Missing the parameter\n");
exit(-1);
}
/* -----<set signal function>----- */
if( signal(SIGTERM, SIG_IGN) != SIG_IGN ) {
signal(SIGTERM, SRV_S1_signalexit);
}
if( signal(SIGINT, SIG_IGN) != SIG_IGN ) {
signal(SIGINT, SRV_S1_signalexit);
}
Return_PacketHead(sockID,P_COM_SEND_IDENT,IS_OK);
DebugLog("Send Connect OK");
SRV_S1_Process();
SRV_S1_ErrorDeal(IS_NG,SYSQUIT_TYPE);
}
/********************************************************************
* NAME : SRV_S1_Process
* FUNCTION : deal with packet received
* PROCESS : 1. select socket
* : 2. test to determine if disconnect
* : 3. read socket data and deal with this data
* INPUT :
* OUTPUT :
* UPDATE :
* RETURN : IS_NG : return because some problem
* AUTHOR : ZZ-NODE/2000.12.22/songqufei
* CALL : FD_ZERO()
* : FD_SET()
* : select()
* : TCFV_Read_Packet()
* : TCP_Close()
********************************************************************/
int SRV_S1_Process()
{
int max_socket; /* socket no used for select */
fd_set readable_set; /* readable set */
fd_set readable_set2; /* readable set */
struct timeval time_val; /* used in set time value */
int readable_count;
char *pPacket;
int errflag;
/* -----<initialize readable_set>----- */
max_socket = sockID + 1;
FD_ZERO(&readable_set2);
FD_SET(sockID,&readable_set2);
time_val.tv_sec = MAX_TIME_VAL;
time_val.tv_usec = 0;
/* -----<loop for accept and socket read>----- */
for(;;) {
memcpy(&readable_set,&readable_set2, sizeof(fd_set));
readable_count = select(max_socket,&readable_set,NULL,NULL,&time_val);
if(readable_count==0) {
continue;
}
if(readable_count<0) { /* select error */
DebugLog("select error");
break;
}
if(FD_ISSET(sockID,&readable_set)) {
pPacket = TCP_RecvPacket(sockID,MAX_TIME_VAL,&errflag);
if(errflag) { /* socket is disconnect */
DebugLog("Disconnect with JF prcess!");
SRV_S1_ErrorDeal(IS_OK,COMMERR_TYPE);
break;
}
if(pPacket != NULL) {
SRV_S1_Read_Packet(sockID,pPacket);
free(pPacket);
}
}
}
return IS_NG;
}
/********************************************************************
* NAME : SRV_S1_Read_Packet
* FUNCTION :
* PROCESS :
* INPUT :
* OUTPUT :
* UPDATE :
* RETURN :
* AUTHOR : ZZ-NODE/2000.12.20/songqufei
* CALL :
********************************************************************/
int SRV_S1_Read_Packet(int sockID,char *pPacket)
{
PacketHead *pPacketHead;
pPacketHead = (PacketHead *)pPacket;
switch(pPacketHead->iPacketID) {
case P_SONG1_SEND_GREEDING :
DebugLog("Receive PacketID: P_COM_SEND_IDENT");
SRV_S1_GET_a_greeding(sockID,pPacket);
break;
default:
DebugLog(" Unknow PacketID=%d",pPacketHead->iPacketID);
Send_PacketHead(pPacketHead->iPacketID,ERROR_UNKNOWN_ID);
break;
}
return IS_OK;
}
/********************************************************************
* NAME : SRV_S1_signalexit()
* FUNCTION : close sockets when exit
* PROCESS : close sockets before exit
* INPUT :
* OUTPUT :
* UPDATE :
* RETURN :
* AUTHOR : ZZ-NODE/2000.12.22/songqufei
* CALL : SRV_S1_ErrorDeal()
********************************************************************/
void SRV_S1_signalexit()
{
DebugLog("Receive a signal and exit");
SRV_S1_ErrorDeal(IS_NG,UNNOMAL_TYPE);
}
/********************************************************************
* NAME : SRV_S1_ErrorDeal
* FUNCTION : system error deal
* PROCESS : 1. deal with error according error type
* : 2. rollback oracle operation
* INPUT : iErrno : error type
* OUTPUT :
* UPDATE :
* RETURN :
* AUTHOR : ZZ-NODE/2000.12.22/songqufei
* CALL : exit()
********************************************************************/
SRV_S1_ErrorDeal(int iErrno,int iErrVar)
{
if(sockID>0) {
TCP_Close(sockID);
}
ErrorLog(iErrVar,"SYSTEM","Process %s, exit",szSubSystemID);
exit(iErrno);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -