Socket C : recevoir des données non périodiqu
bibi
-
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 ...)
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 ...)
A voir également:
- Socket C : recevoir des données non périodiqu
- Socket 478 ✓ - Forum Processeur
- Carte mere socket 775 - Forum Carte graphique
- Check_nrpe state critical: socket timeout after 10 seconds. ✓ - Forum Ubuntu
- Socket 1150 vs 1155 ✓ - Forum Matériel & Système
- Socket 1150 vs 1151 - Forum Processeur
2 réponses
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.
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.
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.
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.