Question sur select() - C - Programmation
Marsh Posté le 28-02-2004 à 17:19:00
je t'aurais bien dit "avec des threads", c'est ce qu'y a de plus logique.
sinon une autre solution : tu fais ton select (avec un timer de x msec), puis après le traitement du select, tu utilises un compteur pour appeler une fonction toutes les n secondes. comme ca c'est indépendant des connexion clients.
schématisé :
- select(), avec un timer de 100 ms par ex
- traitement() du select
- incrémentation d'un compteur, selon la durée écoulée
- si compteur > 2 sec, tu fais ton bordel.
bon je m'exprime mal, mais bon c'est assez simple a comprendre...
Marsh Posté le 29-02-2004 à 13:21:49
Konar a écrit : je t'aurais bien dit "avec des threads", c'est ce qu'y a de plus logique. |
j'ai pas le droit au thread
ben c'est ce que je pensais faire mais j'ai pas le meme probleme ?
c'est a dire que le compteur sera incrémenté a chaque appel du select et pas forcement toute les 100ms du timeout, vu que le select déboucle dès que j'ai un accept sur un de mes socket.
ca marche si le select déboucle vraiment que toute les 100ms ce qui est pas possible pour qu'il puisse rendre son service, non ?
Marsh Posté le 29-02-2004 à 16:42:54
me suis mal exprimé : il faut incrementer ton compteur selon le temps qu'il s'est écoulé depuis l'appel a select, et non pas avec le timeout du select lui meme.
de cette manière tu as une sorte de compteur indépendant de ce qui se passe dans le select.
Marsh Posté le 29-02-2004 à 18:36:21
Konar a écrit : me suis mal exprimé : il faut incrementer ton compteur selon le temps qu'il s'est écoulé depuis l'appel a select, et non pas avec le timeout du select lui meme. |
wha ca soule
ya pas un moyen de rendre les i/o insensible au signal ?
Marsh Posté le 29-02-2004 à 20:38:31
EpoK a écrit : |
utiliser un vrai os.
sinon c'est vrai que c'est compliqué a faire :
Code :
|
Marsh Posté le 28-02-2004 à 16:47:16
bonjour,
je doit réalisé un server en C qui répond à des requette http sur deux port différent, pour cela l'utilisation de select est imposé.
je cré donc mon select avec mes deux socket dedans, et quand il déboucle j'ai :
ca marche tres bien mon server arrive a rendre le service sur les deux port.
le probleme vien du fait que le server doit afficher dans la console des stat toute les n secondes.
j'ai d'abord pensé avec un sigalrm, mais comme select read etc sont des i/o ca me les fait planter, et il faudrai que je teste errno = EIRN ou je sais plus quoi, bref ca me soule un peu.
j'ai donc feinté en mettant mon timeout de select a n seconde du coup je fait :
mais le problem c'est que quand un client utilise le service le select boucle et le timeout n'arrive jamais.
vous voyez une solution pas trop compliqué ?
Message édité par EpoK le 28-02-2004 à 16:47:38