[C] Server plante
shootme
Messages postés
1
Statut
Membre
-
Char Snipeur Messages postés 10112 Statut Contributeur -
Char Snipeur Messages postés 10112 Statut Contributeur -
Bonsoir,
Voila j'ai commencé a coder un server de tchat...
Probléme: Dès que un utilisateur ce déconnect l'appli par en cacahouéte.
Voici le code :
Voila tout me parait normal... mais il plante et fait n'importe quoi.
exemple il lance la boucle
plusieurs fois quand un utilisateur ce déconnect...
Voila j'ai commencé a coder un server de tchat...
Probléme: Dès que un utilisateur ce déconnect l'appli par en cacahouéte.
Voici le code :
//main.h
struct connected {
char *pseudo;
char *ip;
int sock;
struct connected *next;
};
extern connected *co;
//main.c
struct connected *co = NULL; // je centralise toute les infos des connecté ici
DWORD WINAPI client_boucle(void * lpParameter) {
struct connected *user = (struct connected *) malloc(sizeof(connected));
struct connected *d = NULL;
int max = 0;
int i = 0;
char buffer[2048];
fd_set fs;
while(1)
{
FD_ZERO(&fs); //mise a zéro
FD_SET(ssock, &fs); //set ssock dans mon fd
d = co; //Ajoute la totalité de la struct connected dans d
while (d != NULL) {
FD_SET(d->sock, &fs); //ajout tous les connecté dans fd
d = d->next;
}
if (select(max + 1, &fs, NULL, NULL, NULL) == -1) break;
if (FD_ISSET(ssock, &fs)) { //Connexion utilisateurs
SOCKADDR_IN csin;
int sinsize = sizeof(csin);
csock = accept(ssock, (SOCKADDR *)&csin, &sinsize);
nb_con++;
lecture_client(csock, buffer); //info que l'user transmet a la connexion
user->pseudo = strdup("test");
user->ip = strdup("127.0.0.1");
user->sock = csock;
add_user(user); //Ajout en struct
}else { //action d'un utilisateur
d = co;
while (d != NULL) {
if (FD_ISSET(d->sock, &fs)) { //Je regarde quel utilisateur
if(lecture_client(d->sock, buffer) == 0) {// utilisateur Déconnecté
nb_con--;
closesocket(d->sock); //fermeture de la socket utilisateur
rm_user(d); //suppression de l'utilisateur.
}
}
d = d->next;
}
}
}
return 0;
}
Voila tout me parait normal... mais il plante et fait n'importe quoi.
exemple il lance la boucle
while (d != NULL) {
if (FD_ISSET(d->sock, &fs)) { ....
plusieurs fois quand un utilisateur ce déconnect...
A voir également:
- [C] Server plante
- Plante - Guide
- Cybera server - Télécharger - Divers Réseau & Wi-Fi
- Ps3 media server - Télécharger - Divers Réseau & Wi-Fi
- Filezilla server - Télécharger - Téléchargement & Transfert
- Cette plante encore peu connue fleurit toute l'année - Et elle est magnifique ! - Guide