azubal | Bonjour, j'utilise select dans mon programme sur une socket et sur un /dev/ttyS.
Le programme se charge de transmettre les données recu d'un coté, de l'autre coté (et vice versa).
Voici mon code :
Code :
- while (1) {
- tv.tv_sec = 0;
- tv.tv_usec = 5000L;
- FD_ZERO(&readfds);
- FD_SET(tty_fd, &readfds);
- FD_SET(s_server, &readfds);
- FD_SET(s_cli, &readfds);
- rSelect = select(MAX(MAX(s_server, s_cli), tty_fd) + 1, &readfds, NULL, NULL, &tv);
- if (rSelect == -1)
- exit(EXIT_FAILURE);
- if (!rSelect && poll_ir) {
- pollIR(); // écrit sur tty_fd
- poll_ir = 0;
- continue;
- }
- if (FD_ISSET(tty_fd, &readfds)) {
- readIRAndSendToSocket(); //lis tty_fd et écrit sur s_cli
- poll_ir = 1;
- continue;
- }
- if (FD_ISSET(s_server, &readfds)) {
- s_cli = accept(s_server, 0, 0);
- continue;
- }
- if (FD_ISSET(s_cli, &readfds)) {
- readSocketAndSendToTTYS(&s_cli); // lis s_cli et écrit sur tty_fd
- continue;
- }
- }
|
quand select arrive en timeout, la fonction PollIR() est appelé, elle envoie une commande sur le port COM. Quand le port COM envoie la reponse, select appelle readIRAndSendToSocket().
Cependant, si entre temps des données sont accessible en lecture par la socket, select va appeler readSocketAndSendToTTYS(); et apres ca je ne recevrai jamais plus la réponse du port COM et comme le flag poll_ir est a 0, la boucle pollIR() est bloqué .
Je ne comprends pas pourquoi select ne m'informe pas que des données sont en attente sur le port com  Message édité par azubal le 15-06-2007 à 17:14:10
|