Comment savoir si un client et toujours connecté à un socket ? [C++] - Programmation
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 ?
Marsh Posté le 27-01-2002 à 18:19:42
up !
Je suis sur que quelqu'un peut m'aider sur l'emploi de select(); !
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 !
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 !