select() ou fork()? [socket] - C++ - Programmation
Marsh Posté le 04-05-2005 à 11:52:14
J'ai finalement résolu mon problème toute seule, merci pour votre aide! Vraiment très concluant de poster sur ce forum!!
L'embrouille au niveau des adresses IP des clients n'était en fait qu'une illusion. Le serveur fonctionnait correctement. C'est l'appel à inet_noa() qui conserve la dernière adresse..
Sinon, j'ai changé la structure de stockage de mes sockets pour une map.
Code :
|
En espérant que ce sujet, aide quelqu'un à défaut de m'avoir aidé moi!
Marsh Posté le 27-04-2005 à 09:24:49
Bonjour!
Je développe un serveur communiquant par sockets TCP dont la contrainte principale est d'être portable sous linux et sous windows.
Ce serveur doit accepter plusieurs connexions (et réception de message) simultanées. Pour gérer cela, j'hésitais entre le classique fork et un select(). J'ai finalement implémenté ce serveur multi-clients avec un select() et les macros FD_SET, FD_ISSET...
Les connexions et les échanges de messages fonctionnent correctement en simultané, mais j'ai quand même un problème. Mon programme s'enmêle les pinceaux avec les IP des clients!!
J'ai créé une classe Masocket, ce qui permet d'éclaircir le code et de gérer la portabilité de manière transparente. Je déclare 1 objet Masocket correspondant au listener et un tableau contenant les objets Masocket correspondant au clients. Dans les exemples de code que j'ai pu trouver pour illuster l'utilisation du select(), les sockets sont toujours des int (unix).
Pour que ce soit plus clair, voici mon code :
Concrètement, ma question est la suivante :
Le fait que je manipule des objets non primitifs est-il un problème pour une gestion multi-clients avec select() ou ce problème peut-il être résolu? Est-ce fork() la solution pour conserver ma classe Masocket?
Question subsidiaire :
Suis-je obligée de faire un tableau de Masocket? ou bien 1 Masocket pour le listener et 1 Masocket pour le client courant pourraient suffire?
Merci d'avance pour votre aide!