- 论坛徽章:
- 0
|
while(1)
{
timeout.tv_sec = 0;
timeout.tv_usec = 50000;
nRecv = 0;
idleNum = 0;
MaxSockFD = localSocket;
FD_ZERO(&readfds);
FD_SET(localSocket, &readfds);
for(i=0; i<4; i++)
{
if (clientSocket > 0)
FD_SET(clientSocket, &readfds);
else
idleNum++;
MaxSockFD = MAX(MaxSockFD, clientSocket);
}
if (idleNum == 4) //如果4个客户端都没有连上来就认为本机是空闲的
g_SysStatus = CONNECT_SUB_HEART_DEVIDLE;
nRet = select(MaxSockFD+1, &readfds, NULL, NULL, &timeout);
if (nRet < 0)
{
printf("select error\n");
continue;
}
else if (nRet == 0)
{
continue;
}
//检查是否有客户端连接上来
if(FD_ISSET(localSocket, &readfds))
{
if((newsockfd = accept (localSocket, (struct sockaddr *)&ClientAddr, (socklen_t*)&ClientAddrLen))<0)
{
perror("accept");
continue;
}
else
{
flagReg = 1;
g_SysStatus = CONNECT_SUB_HEART_DEVBUSY_ALARM;
}
if (flagReg) //说明有客户端已经连接上来,要接收注册消息
{
//接收注册消息
if(recv(newsockfd, szBuffer, sizeof(szBuffer), 0) <= 0)
{
printf("connect closed.\n");
close(newsockfd);
newsockfd = -1;
}
else
{
memcpy((void*)&cmd, szBuffer, sizeof(ConnectType));
if (-1 == ParseMsg(cmd, DecoderAttr))
continue;
}
flagReg = 0;
continue;
}
}
//对于已经连接上的客户端进行管理
for(i = 0; i<4; i++)
{
if (clientSocket>0)
if(FD_ISSET(clientSocket, &readfds))
{
//接收操作
......
}
}
} |
|