// Handle all our clients void CServerSocket::HandleClients( fd_set* fds ) { for(UINT i=0;i<ClientList.size( );i++) { CClientSocket* client = ClientList.at( i ); if(!client->isActive) continue; if(FD_ISSET( client->sock, fds )) { if (client->isserver == true) { //Log( MSG_INFO,"ISC PACKET"); if(!client->ISCThread()){ client->isActive = false; DisconnectClient( client );} } else if(!client->ReceiveData( ) ) { client->isActive = false; DisconnectClient( client ); } } } }
// Handle client socket (threads) PVOID ClientMainThread( PVOID ClientSocket ) { CClientSocket* thisplayer = (CClientSocket*) ClientSocket; fd_set fds; while(thisplayer->isActive) { FD_ZERO(&fds); FD_SET (thisplayer->sock, &fds); int Select = select( thisplayer->sock+1, &fds, NULL, NULL, NULL ); if(Select == SOCKET_ERROR) { Log( MSG_ERROR,NULL,"Error in Select"); thisplayer->isActive = false; } else { if(FD_ISSET( thisplayer->sock, &fds )) { if (thisplayer->isserver == true) { //Log( MSG_INFO,"ISC PACKET"); thisplayer->ISCThread(); } else if(!thisplayer->ReceiveData( )) { thisplayer->isActive = false; } } } } thisplayer->GS->DisconnectClient( thisplayer ); pthread_exit(NULL); return 0 ; }