2011-01-13 4 views
1

Je travaille actuellement sur un environnement de simulation robotique. Les robots qui peuvent interagir avec le virtuel peuvent être contrôlés/surveillés via une connexion réseau. Pour toute la communication réseau (et bien sûr d'autres choses, par exemple les threads), nous utilisons la bibliothèque ACE. Le problème que j'ai maintenant est qu'il me semble que la partie UDP asynchrone est cassée. Lors de l'exécution du programme de test "test_udp_proactor -h localhost -p 55555" fourni avec ACE, j'obtiendra toujours le code d'erreur 89 (adresse de destination requise). Jusqu'à présent, ce que j'ai essayé, mais rien aidé:ACE et communication UDP asynchrone

  • recompiler nouvelles versions/différentes d'ACE
  • modification du code de test_udp_proactor, recréant un programme similaire
  • changer l'environnement (PC différent avec 32bit CPU et Ubuntu 9.10)

Lorsque vous utilisez des méthodes synchrones, tout fonctionne correctement, donc il n'y a pas d'erreur avec le matériel/logiciel réseau.

J'ai cherché google et ce site pendant des heures/jours maintenant et il semble que personne d'autre n'a ce problème! Au moins, je ne peux pas le trouver.

Je suis vraiment frustré maintenant, car pour autant que je le comprenne, ACE est vraiment mature et fiable. Bien que certaines personnes sont très friands de la conception de celui-ci. Il est utilisé dans la communauté aérospatiale, où la fiabilité et les aspects temps réel sont un must! Je ne peux pas croire que ACE ne supporte pas asynch. La communication UDP et/ou personne d'autre ne l'a trouvé.

Quelqu'un peut-il lancer un test simple avec test_udp_proactor pour vérifier ce comportement? Nous devons utiliser un système capable en temps réel, donc les fenêtres ne sont pas une option ...

D'autres conseils et astuces, de préférence de la part des gourous ACE? :-)

Merci beaucoup

+0

OK J'ai cherché un peu plus et selon le site du développeur (http://lse.sourceforge.net/io/aio.html) aio on sockets n'est pas vraiment implémenté. J'ai aussi lu quelque chose à propos de l'implémentation étant vraiment boguée, quand il s'agit de sockets UDP, mais je ne trouve plus le lien vers le site :-(Nous avons choisi d'utiliser des threads et une approche synchrone bloquante, puisqu'il n'y a pas de gain réel (ou même pas du tout) avec aio tel qu'il est maintenant j'espère vraiment qu'il y aura un meilleur support dans le futur – siddian

Répondre

0

Essayez de regarder le problème à un niveau d'appel système. Utilisez strace pour voir quels appels et valeurs système sont envoyés au noyau et quels sont les codes d'erreur renvoyés par ces appels système.

Vous pouvez trouver votre problème rapidement.

+0

Merci pour votre réponse J'aimerais vraiment me plonger dans la profondeur de la bibliothèque aio;), malheureusement, je n'ai pas vraiment le temps de le faire. D'autres parties de la simulation doivent encore être implémentées, c'est pourquoi nous avons décidé d'utiliser des threads et de prendre soin de cela plus tard. – siddian

Questions connexes