void CAccepter::acceptedLounge(SOCKET newsd, const struct sockaddr_in& addr) { SingleLock l(&mutex_); l.lock(); acceptedSockets_.push_back(AcceptItem(newsd, addr)); }
//-------------------------------------------------------------------- //----- CommandRecognizing() //-------- sd - socket descriptor //-------------------------------------------------------------------- void CommandRecognizing (int sd) { RD cmd; int res, links=0; int IsName = 0; int IsWorking = 1; // sign of break or end connection by client char ClientName[256]; struct sockaddr_in addr; int addr_size = sizeof (addr); c_tree con_tree; ClientName[0] = 0; int last_error; res = getpeername (sd, (struct sockaddr *) &addr, (socklen_t *) & addr_size); last_error = errno; if (res != 0) { fprintf (stderr,"(%d) connector.c getpeername() ERROR(%d)\n", sd, last_error);fflush(stdout); return; } ConnectorsCounter++; CreateList (&con_tree); while (IsWorking > 0) { if( WaitNetDataExt(sd,5000) > 0) { if (STOP_TASK) { cmd.command = 88; break; } cmd.command = 80; IsWorking = recv (sd, &cmd, sizeof (cmd), MSG_WAITALL); // gettimeofday(&tv1, NULL); // printf("(%d)Connector recv: command = %d, work = %d, IsWorking = %d\n", sd, cmd.command, cmd.work, IsWorking);fflush(stdout); if (IsWorking > 0) { switch (cmd.command) { case GET_UNIT_IDENT_BY_NAME: IsWorking = GetUnitIdentByName (sd, cmd.work); break; case ACCEPT_ITEM: IsWorking = AcceptItem (sd, (ident_t) cmd.work); break; case FREE_ITEM: IsWorking = FreeItem (sd, (ident_t) cmd.work); break; case FREE_EXT_ITEM: IsWorking = FreeExtItem (sd, (ident_t) cmd.work, &con_tree); break; case READ_BY_IDENT: IsWorking = ReadByIdent (sd, (ident_t) cmd.work); break; case WRITE_BY_IDENT: IsWorking = WriteByIdent (sd, (ident_t) cmd.work); break; case END_SESSION: IsWorking = EndSession (sd); break; case READ_ALL: IsWorking = ReadAll (sd, &con_tree); break; case READ_NEW: IsWorking = ReadNew (sd, &con_tree); break; case LINK_ITEM_BY_NAME: IsWorking = LinkItem (sd, cmd.work, &con_tree); if(IsWorking) links++; break; case BEGIN_SESSION: recv (sd, ClientName, cmd.work, MSG_WAITALL); IsName = 1; break; case INIT_DB: init_reload(); IsName = 1; fprintf (stdout,"<%s> init reload DB [sd=(%d) %s:%d]. Now are %2d clients.\n", ClientName[0] ? ClientName : "Unknown", sd, inet_ntoa (addr.sin_addr), ntohs (addr.sin_port), ConnectorsCounter); break; case WRITE_MULTIPLE: IsWorking = WriteMultiple(sd, cmd.work); break; default: fprintf (stderr,"Unrecognized command %d \n", cmd.command);fflush(stdout); break; } if (IsName < 2) { fprintf (stderr,"<%s> has been connected [sd=(%d) %s:%d]. Now are %2d clients.\n", ClientName[0] ? ClientName : "Unknown", sd, inet_ntoa (addr.sin_addr), ntohs (addr.sin_port), ConnectorsCounter);fflush(stdout); IsName = 2; } } } else { fprintf (stderr, "Connector() TIMEOUT\n");fflush(stdout); break; } } ClearList (&con_tree); res = ServerFreeAll (sd); ConnectorsCounter--; fprintf (stderr, "(cmd=%d)(links=%d)<%s> has been disconnected [sd=(%d) %s:%d]. Now are %2d clients.\n", cmd.command,links, ClientName[0] ? ClientName : "Unknown", sd, inet_ntoa (addr.sin_addr), ntohs (addr.sin_port), ConnectorsCounter);fflush(stdout); }