Bonjour à tous !
Après avoir chercher assez longtemps sur internet, et fouillé ce forum (merci la fonction recherche, même si j'avais déjà cherché dans les 6 premières pages de post à la main^^), je me décide à poster. Donc j'ai pour projet de développer un serveur web. Tout se passe plutôt pas mal, j'ai facilement réalisé un serveur séquentiel (qui ne traite les requêtes que une par une), puis changé ce serveur pour un serveur parallèle, avec la fonction fork(), puis amélioré ce serveur parallèle grâce au thread, beaucoup plus performant dans ce cas là. Tout se déroule à merveille, j'ai beau laissé tourner mon serveur longtemps, sachant que je fait beaucoup de connexion dessus pour le tester sur la durée, et tout se passe bien, mon pc ne se ralentit pas, ce qui confirme que j'ai bien géré les threads. De toute façon, ça se voit bien dans le code, chaque thread est terminé par pthread_exit, ce qui logiquement suffit.
Donc voilà ma question. J'aimerais savoir s'il est possible de lister tous les threads en activité à un moment précis? Pour l'instant la valeur renvoyée par pthread_create, je ne l'utilise pas, enfin je la test pour vérifié que le thread est bien créé, mais rien d'autre. Et je ne vois pas trop quelle utilité cette valeur pourrait avoir.
Ensuite, concernant select(), j'aimerais juste savoir si j'ai bien compris l'utilité de cette fonction. Par exemple, disons que j'ai un socket A qui est en attente d'un quelconque client qui viendrait se connecter. Je met son descripteur dans une structure dite "de lecture", que je rentre en paramètre de select(), et dès qu'il y a de l'activité sur ce socket, elle rend la main et donc je peux faire mon accept() sans qu'il bloque le programme? Et surtout, sans consommer de ressource durant l'attente d'un hypothétique client. Et je peux aussi déterminer un "timeout", c'est un dire une certaine durée entre la fonction accept() et la fonction read() qui, s'il n'y a aucune donnée transmise durant cette donnée, quitte le thread (en gros ne pas garder le thread actif si le client a par malchance eu une perte de connexion entre sa fonction connect() et sa fonctione write()). Et par contre, je n'ai strictement rien compris aux valeurs renvoyées par select() .
Merci d'avance pour vos réponses.
Thagor
PS: Je n'ai pas mis de code car je ne l'ai pas sous la main, si y a besoin je mettrais ma boucle gérant la création des threads. Et pour information, je suis sous Linux comme environnement de développement (avec VIM, mais ça, ça n'a pas d'importance^^).
Partager