Socket C : recevoir des données non périodiqu

bibi -  
 bibi -
Bonjour,

je dois mettre en place un code C permettant de recevoir des données sur un socket. Bon, jusque là, rien de sorcier. Là où ça se complique, c'est que ce programme tournera dans un environnement temps réel. Il sera appelé toutes les x ms et aura un temps donné pour s'exécuter. De plus, je n'ai pas beaucoup d'info sur l'émetteur si ce n'est qu'il m'envoit des données de manière "aléatoire" (en fait, sur demande d'un utilisateur) en UDP.

Le soucis, c'est que si je fais un recvfrom(), c'est bloquant jusqu'à réception, ce qui pose un problème si je ne reçois rien avant le temps maxi d'exécution de mon code.
Sinon, en jouant un peu, je peux le faire attendre en réception pendant un certain temps, puis l'arrêtter jusqu'à l'appel suivant du code par le noyau temps réel, mais là, si je reçois des données sans être en attente de réception, visiblement, c'est perdu.

En fait, il me faudrait (toujours en C et en UDP), un système pour que lorsque l'émetteur envoie des données, elles soient stockées dans la socket jusqu'à réception par la cible (une boîte aux lettre en somme, mais les sockets me sont imposées puisque je ne maîtrise pas l'émetteur). A moin que je puisse faire des mélanges (sockets côtés émetteur et BAL côté récepteur), mais ça me semble tordu ??

Vous voyez une super solution ?

PS : je suis pas trop spécialiste des communications, je découvre un peu.

Merci à tous (en éspérant que je fût clair ...)

2 réponses

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Je ne connait rien au temps reel, alors je vais peut être te dire une grosse co****ie.
Utilise les thread, et crée un thread qui récupère les message du socket, et éventuellement les mets en pile, avec éventuellement le temps de réception.
comme ça tu n'es pas bloquer par le recvfrom() vu qu'il se déroule dans un thread parallèle.
Bonne chance.
0
bibi
 
salut,

merci pour ta réponse.
En fait, en fouillant un peu, j'ai trouvé qu' une fois les sockets toutes créées, les messages émis n'étaient pas perdus s'ils ne sont pas récupérés de suite. Je peux donc dans cet ordre : émettre, puis recevoir (au lieu de me mettre en attente de réception et d'émettre). Il faut juste que toutes les sockets existent au moment de l'émission apparemment.

Je vais maintenant essayer de séparer les threads comme tu m'as dis, pour tenter de ne plus avoir l'aspect bloquant.

Merci bien.
0