Hello!
Voilà j'ai un petit soucis.
Je développe deux classes servant à rendre plus agréable et simple la programmation des sockets BSD (CSocketClient et CSocketServer).
Pour les tester, j'ai développé un petit programme de chat en mode texte, qui marche très bien. Le seul problème, c'est que j'ai l'impression que la connexion est mal fermée, car quand je quitte le programme (il utilise le port 6666) et que je fais un netstat | grep 6666, j'ai encore la connexion en TIME_WAIT.
Dans ma classe client, je fais un shutdown(socket, SHUT_RDWR); suivi d'un close(socket);
Dans la classe serveur, j'ai une liste openedConnections[n] qui contient la valeur retournée par les fonctions accept() lancées, et openedSockets qui contient le nombre de connexions ouvertes.
Pour fermer les connexions côté serveur, je fais:
Code :
- for(unsigned short i=0; i<=openedConnections; i++) {
- shutdown(openedSockets[i],SHUT_RDWR);
- close(openedSockets[i]);
- }
|
Puis je ferme le socket principal (shutdown()), ouvert avec socket(), et je le close() ensuite.
Savez vous ce qui cloche?
À moins que j'ai posté tout ça pour rien et qu'on me dise que c'est normal le TIME_WAIT ?
(j'en doute
)
Merci
Bye
Note: le programme est développé sous NetBSD 2.0, je peux pas tester sous Linux car j'ai un problème avec les threads, mais je verrais ça plus tard.
Message édité par Deather2 le 10-01-2005 à 20:41:37