J'ai un programme C qui recv/envoie des opérations de/vers le socket en utilisant une boucle for(;;)
et un select()
pour surveiller le descripteur de fichier. J'ai aussi besoin de ce programme pour envoyer un paquet toutes les 80msec à un paquet, comment puis-je l'implémenter? Peut-être que je peux utiliser un fork()
et le processus enfant écrit simplement un accusé de réception dans l'un des descripteur de fichier surveillé par le select()
toutes les 80msec. Y a-t-il de meilleures solutions?Est-il possible d'utiliser nanosleep dans une boucle infinie avec select()?
0
A
Répondre
3
Lorsque vous appelez select(), vous pouvez utiliser l'argument timeout pour limiter le temps d'attente de la sélection.
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
Il est plutôt facile de limiter le délai à 80msec et d'envoyer le paquet requis.
C'est cool, où avez-vous appris que cela a déjà existé? – Karl
Le problème est que select() renvoie plusieurs fois en 80msec et je ne peux pas utiliser le timeval sturct avec le temps restant pour la raison de portabilité (seul linux le fait bien) ... – Federico
@karl: man select: P – Federico