Pb de FORK sur un programme serveur - C - Programmation
Marsh Posté le 29-04-2004 à 19:17:05
euh à tout hasard, avec les pipes y'a pas moyen d'arriver à qqc ?
Marsh Posté le 29-04-2004 à 19:27:15
Mémoire partagée ?
Marsh Posté le 30-04-2004 à 00:20:29
Pipe surement pas...
Mémoire partagée ? De quoi parles tu?
Sinon oui les pthread semblent la solution la plus évidente.. mais je crois que je suis OBLIGE de forker...
Marsh Posté le 03-05-2004 à 15:05:42
j'ai quasiment le même problème... mon serveur fork quand y'a une connexion, et le fils ouvre une socket avec le client... seulement voilà, quand le fils plante, plus moyen de fermer la socket, et au bout d'un certain nombre de plantage de processus fils, le serveur devient amorphe
Marsh Posté le 04-05-2004 à 05:11:15
Comme dit plus haut : mémoire partagée. En gros tu crée une zone avec shmget un peu comme avec avec malloc, sauf que la zone est accessible au process père et au process fils. Puis tu t'y attaches avec shmat.
Par contre après, attention aux accès concurents. Utilises des sémaphores pour gérer les accès...
Marsh Posté le 04-05-2004 à 16:15:00
J'aurai dit aussi memoire partagee, masi c'est une grosse merde a mettre en place pour des tests qui risquent de ne pas etre satisfaisant. A ta place je passerai au thread, et au pile systeme. C'est encore le mieux
Marsh Posté le 29-04-2004 à 19:13:47
Je fais un programme qui, pour l'instant, fork lorsqu'il y a une connexion réseau qui se fait dessus.
J'ai donc plusieurs utilisateurs connectés simultanément sur le serveur, chacun qui a son processus propre, et entre un telnet et le serveur une discussion peut se faire.
Maintenant, j'ai besoin d'accéder à des ressources communes entre chaque processus. Par exemple j'aimerais avoir les pseudos de toutes les personnes connectées sur le serveur à partir d'un processus...
J'ai un pointeur sur structure déclaré en global, mais il est copié à chaque fork, et evidemment, les modifications que lui apporte un certain processus sont invisible pour un autre processus...
Comment faire ?!
Je pense pouvoir utiliser les pthreads, mais je crois que j'en ai pas le droit dans ce projet ci