IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

plusieurs threads ecrivent sur la meme socket


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut plusieurs threads ecrivent sur la meme socket
    Bonjour. J'ai une question pour les programmeurs competants sur le domaine des sockets et threads. Voici mon problème:

    J'ai écrit un programme qui crée des theads, chaque thread sniffe (pcap), envellope le tout dans un paquet privé et envoie le tout vers une socket tcp. Mais j'ai aussi besoin que certains threads utilisent la meme socket tcp. Par exemple, 2 threads qui filtrent sur des @IP/port differents mais qui envoyent le tout vers la meme socket tcp (un multiplexeur). Le problème est que mon logiciel de reception trouve des paquets erronés/perdus.

    Est-il possible d'utiliser la meme socket tcp en ecriture pour plusieurs threads? Est-ce que sendto() est thread-safe, alors je n'ai pas besoin de mutex ou critical section? Meme si j'utilise des critical sections, mon logiciel de reception trouve des erreurs.

    Merci de votre feedback.

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    D'abord vérifie tes algos -- il est simple et rapide de définir des tests unitaires pour vérifier les procédures de sérialization et de désérialisation.

    Tu peux aussi tester avec un seul thread de réception (et ne rien balancer dans le cas du deuxième) -> vérifier que ce n'est pas un problème d'entrelaçage, qui devrait pourtant être résolu avec une section critique d'une portée suffisante (tous les send-to associés à tes paquets entrants)

    Sinon, tu peux aussi garder tes deux threads et en rajouter un troisième.
    Les deux threads de réceptions remplissent une queue de messages (synchronisée et tutti quanti), le 3e dépile la queue et expédie.
    (Il y a tout ce qui faut dans ACE si tu as autre chose à faire que réinventer la roue -- ACE est un peu une enclume, mais une bonne grosse enclume portable, plutôt sécurisée, et efficace)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    std::queue pour implémenter une file de messages, non ?

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Il faut encore rajouter des locks, voire des notifications événementielles par dessus, ou tout simplement de quoi débloquer proprement le thread d'émission lorsqu'un message à réexpédier est disponible.

    std::queue peut être une base de départ, mais il y a des trucs à mettre par dessus.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Plusieurs boutons submit sur la meme page
    Par KaNDeL dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2009, 19h01
  2. Mettre plusieurs combo box sur une meme ligne
    Par hugo69 dans le forum Ext JS / Sencha
    Réponses: 4
    Dernier message: 13/11/2008, 15h42
  3. Plusieurs clients oracle sur le meme poste
    Par Fofy_einstein dans le forum Administration
    Réponses: 1
    Dernier message: 07/05/2008, 18h59
  4. Plusieurs application XMLRAD sur le meme serveur IIS6
    Par powerlog dans le forum XMLRAD
    Réponses: 3
    Dernier message: 13/09/2006, 17h25
  5. threads simultanes sur une meme socket
    Par khayyam90 dans le forum Développement
    Réponses: 9
    Dernier message: 28/01/2006, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo