tckoullou | non ya po du tou d'ereur avec getlast error
enfet select renvoi zero , si yavaait erreu y renverer socket error sa ve dire qu ya zero socket en reception pourtan quand je conect un client avec le select du conect renvoit 1 donc sa marche mais quant je fait le send
via le client le select du recv ne renvoi po de socket en cour de lecture donc 0 tous le temp je compren po....
ps :avec ou sans time out sa marche po bon je lache le code complet:
Code :
- int main()
- {
- WSADATA WSAData;
- WSAStartup(MAKEWORD(2,0), &WSAData);
- int NbrClient = 0 ;
- SOCKET sockclient = 0;
- SOCKET con;
- SOCKADDR_IN client;
- SOCKADDR_IN conect;
- int ret=0;
- unsigned long ul = 1;
- int retSelect=0;
- int clen =sizeof(client);
- int flen =sizeof(conect);
- con=socket(AF_INET,SOCK_STREAM,0);
- conect.sin_addr.s_addr = htonl(INADDR_ANY);
- conect.sin_family = AF_INET;
- conect.sin_port = htons(4148);
- bind(con, (SOCKADDR *)&conect, sizeof(conect));
- //----------------------------------------------------
- fd_set fdread;
- char *buf=new char [16];
- struct timeval seltimeout;
- DWORD RecvSend;
- seltimeout.tv_usec= 10;
- seltimeout.tv_sec=21;
- //--------------ger e les conection sur le acept
- listen(con, 0);
- while (true)
- {
- FD_ZERO(&fdread); //met le set a 0
- FD_SET(con, &fdread);
- int ret = select(0, &fdread, 0, 0, 0);
- if (ret >0)
- {
- cout << "valeur du acept :"<< ret<<endl;
- sockclient = accept(con, (SOCKADDR *)&client,&clen ) ;
- ret = ioctlsocket(sockclient,FIONBIO,(unsigned long *)1);
- if (ret == SOCKET_ERROR)cout <<"Impossible de passer en nomblocking mode....!"<<endl;
- else {cout << "NOMBLOCKING ACTIVED SOCKET"<<endl;cout <<"::"<<ret<<endl; }
- FD_ZERO(&fdread);
- cout << "le socket du client ="<<sockclient<<endl;
- FD_SET(sockclient,&fdread);
- NbrClient++;
- cout <<"Nombre de client:"<<NbrClient<<endl;
- }
- //for nbrc}
- //----------------------------rer-re-ere-erere-
- //------ gere la reception
- if (NbrClient >0)
- {
- if (ret =select(0,&fdread,NULL,NULL,&seltimeout)==SOCKET_ERROR)cout<<"select error"<<endl;//else cout <<"select ok!!!!!!!"<<endl;
- // cout << GetLastError()<<endl;
- if (ret!=0)cout <<"La valeur de ret select "<<ret<<endl;
- // Sleep(1000);
- if (ret > 0)
- {
- cout <<" un SOCKETR est en cour de lecture"<<endl;
- if (FD_ISSET(sockclient,&fdread))
- {
- if ( recv(sockclient,buf,16,0)==-1)cout <<"reception du nom ECHEC:!"<<endl;
-
- }
- }
- }
- }
- // fin du programme
|
Message édité par tckoullou le 20-05-2004 à 19:09:29
|