met de functie select kan je van een aantal sockets zien welke er klaar zijn om naar te schrijven of van te lezen.
Behalve sockets kan je ook andere file descriptors meegeven. Nu wil ik in mijn programma behalve van een aantal sockets ook van de standaard input weten of er iets te lezen valt. Dit krijg ik echter niet voor elkaar.
Ik heb even een klein voorbeeld programmaatje geschreven dat alleen de standaard input bekijkt. Volgens mij is de file descriptor die ik meegeef niet geldig want select retourneerd -1. (normaal gesproken retourneerd de functie het aantal file descriptors die "ready" zijn.
Ik werk met windows XP maar de code moet wel enigszins portable worden.
Behalve sockets kan je ook andere file descriptors meegeven. Nu wil ik in mijn programma behalve van een aantal sockets ook van de standaard input weten of er iets te lezen valt. Dit krijg ik echter niet voor elkaar.
Ik heb even een klein voorbeeld programmaatje geschreven dat alleen de standaard input bekijkt. Volgens mij is de file descriptor die ik meegeef niet geldig want select retourneerd -1. (normaal gesproken retourneerd de functie het aantal file descriptors die "ready" zijn.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <winsock.h>
#include <stdio.h>
fd_set readfds ;
timeval timeout ;
int fdsReady ;
int running = 1 ;
int main (int argc, char *argv[])
{
FD_ZERO (&readfds) ; // set is leeg
FD_SET (fileno (stdin), &readfds) ; // voeg stdin toe (fd van stdin is 0)
timeout.tv_sec = 30 ; // timeout tijd op 30 seconden
timeout.tv_usec = 0 ;
printf ("prog started\n") ;
while (running) {
printf ("select called\n") ;
fdsReady = select (1, &readfds, NULL, NULL, &timeout) ;
printf ("fdsReady = %d\n", fdsReady) ;
if (FD_ISSET (0, &readfds)) running = 0 ;
}
return 0 ;
} |
Ik werk met windows XP maar de code moet wel enigszins portable worden.