Il est difficile de montrer tous le code car il y a plusieurs class c assez long mais voila les parties qui posent probleme.
1ere partie:
Code :
- //création de la socket
- Socket=socket(AF_INET,SOCK_STREAM,0);
- if (Socket==-1)
- {
- perror("impossible de creer la socket" );
- exit(1);
- }
- //récuperation de l'adresse de la socket de l'hote a qui on veut se connecter
- struct sockaddr_in *A=Hote->getAdresse();
- //connect à l'hote
- if(connect(Socket,(struct sockaddr*)A, sizeof(struct sockaddr))==-1)
- {
- perror("connect" );
- exit(1);
- }
- etat=Connecte;
|
2éme partie et c'est la que ca coince:
Code :
- int new_fd;
- struct sockaddr_in their_addr;
- socklen_t sin_size = sizeof(struct sockaddr_in);
- fd_set rfds;
- struct timeval tv;
- int retval;
- tv.tv_sec = 2;
- tv.tv_usec = 0;
- //L'ajout de la socket sock_conn dans le SET du select
- FD_ZERO(&rfds);
- FD_SET(socket_conn, &rfds);
- //select attend 2 seconde si 1 truc se passe en lecture sur la socket sock_conn
- retval = select(socket_conn+1, &rfds, NULL, NULL, &tv);
- //Acceptation des demandes de connection en TCP qui ne marche pas :fou: !!
- if (retval==1)
- {
- if(new_fd = accept(socket_conn,(struct sockaddr*) &their_addr,&sin_size)<0)
- {
- //Pour voir si l accept passe et que l'erreur c qu'il est non-bloquant
- if(errno!=EWOULDBLOCK)
- {
- perror("accept" );
- std::exit(1);
- }
- }
- else{
- printf("accepte\n" );
- printf("new fd : %d \n",new_fd); //Et c'est ici mon probléme ca m'affiche 0 c'est pas normal
- }
- }else printf("j'ai rien recu sur socket_conn depuis 2 secondes \n" );
|
Je recapitule: la 1ere partie est censé envoyé une requete connect() à un hote.2éme partie censé accepter ce meme connect() et renvoyé un descripteur de fichier mais le malheur c'est que ca me renvoie 0 qui est STDIN.
Bon j'espere que ca vous dit quelque chose car la c'est pas evident j'avoue...
Message édité par imad_limoges le 12-04-2006 à 00:09:15