tck59 | il faut utiliser la fonction select
voila je te donne une methode qui utilise la fonction select:
Code :
- short module::recv_message(SOCKET sock,sending_Struct &recv_struc)
- {
- if (int err=recv (sock,(char *) &recv_struc,524,0)==-1)
- { this->Gere_err_recv(err,sock);
-
- cout << "Error Socket_error on recv data <!> "<<endl;//throw __exeption( "Error Socket_error on recv data <!> " );
- return -1;
- }
- else
- return 0 ;
- }
- }
- int module::select_recv()
- {
- this->threads_pseudo.create_thread(&thread_pseudo_envoi);
- timeval waitTime;
- waitTime.tv_sec = 0;// on met le timed ou t du select a 0
- waitTime.tv_usec = 0;
- for (;;)
- {
- Sleep(10);
- boost::mutex::scoped_lock scoped_lock(ServerManager::GetInstance().mutex);
- FD_SET pollingSet = this->masterSet;// copy dans un set temporaire
-
- if (pollingSet.fd_count == 0)
- continue; //si ya reien dans le set on revien au debut
- int result = select(pollingSet.fd_count, &pollingSet, NULL, NULL, &waitTime);
- if (result == 0)
- continue; //po de socket en lecture on revient au debut de la boucle
- if (result == SOCKET_ERROR)
- {
- printf("Error sur le select()\n" );
- continue;
- }
- //-----------------a partir de la on parcour le set pour faire ce quez l'on veut sur celuit ci
- for (unsigned int i = 0; i < pollingSet.fd_count; i++)
- {
- unsigned int clientSocket = pollingSet.fd_array[i];
- string msg;
- sending_Struct struc_echange;//= new sending_Struct;
-
- if (this->recv_message(clientSocket,struc_echange)==SOCKET_ERROR)
- continue;
- cout <<" message resu:"<<struc_echange.message<<endl;
-
- for (unsigned int o = 0; o < WRITE.fd_count ;o++)
- {
-
- cout <<" ENVOYER sur le socket : ="<<this->WRITE.fd_array[o]<<endl;
-
- this->send_message(this->WRITE.fd_array[o],struc_echange);
-
-
- }//fin du for
- }//fin du for de parcour de socket
- }//fin du for infini
- return 0;
- }
|
Message édité par tck59 le 24-12-2004 à 17:05:38
|