[C++] Comment savoir si un client et toujours connecté à un socket ?

Comment savoir si un client et toujours connecté à un socket ? [C++] - Programmation

Marsh Posté le 26-01-2002 à 20:09:29    

Tout est dans le sujet ! J'ai essayé de faire getpeername ou getsockname sur la socket cliente mais quand le client est parti elles ne renvoient pas d'erreur !
merci !

Reply

Marsh Posté le 26-01-2002 à 20:09:29   

Reply

Marsh Posté le 26-01-2002 à 21:08:15    

Je crois que select() est la fonction appropriée
Voici mon code :
 
a = accept(s,NULL,NULL); //s = socket serveur
if(a != INVALID_SOCKET)
{
 FD_SET(a,&set);
 while(test){
        rval = select(0,&set,NULL,NULL,NULL);
 if(rval == 0 || rval == SOCKET_ERROR)
 {
  //Le client s'est barré
  //Mais ça marche pas !
                break;
 }
     }
}
 
A chaque fois qu'un client arrive, select renvoie SOCKET_ERROR ! pourquoi ?

Reply

Marsh Posté le 27-01-2002 à 18:19:42    

up !
Je suis sur que quelqu'un peut m'aider sur l'emploi de select(); !

Reply

Marsh Posté le 27-01-2002 à 19:00:26    

du nouveau, j'ai mis FD_ZERO, c'est déja mieux, mais...
 
a = accept(s,NULL,NULL); //s = socket serveur
if(a != INVALID_SOCKET)
{
 //boucle
 FD_ZERO(&set);
 FD_SET(a,&set);
 rval = select(0,0,0,&set,0); //ça bloque ici , ça va pas plus loin !
 if(rval == SOCKET_ERROR || FD_ISSET(a,&set))
 {
  //Le client s'est barré
  //Mais ça marche pas !
 }
}
 
Maintenant que j'ai rajouté FD_ZERO ça bloque à select, et même si je spécifie un temps en 5ème paramètre ! ça veut pas aller plus loin dans le code !

Reply

Marsh Posté le 28-01-2002 à 14:00:03    

Pourquoi ça bloque :cry:  
Adiez moi à utiliser select() !

Reply

Marsh Posté le 28-01-2002 à 18:04:52    

:bounce:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed