Bonjour!
j'ai un petit problème pour utiliser la fonction select.
ce que je voudrais réussir à faire en fait c'est que mon client soit en attente d'évènements venant de la part du serveur et qu'il réagisse en fonction (si c'est un évènement d'écriture, de lecture... ou si trop de temps c'est écoulé...)
donc voilà ce que j'ai fait coté client:
coté serveur, j'ai ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 while(boolll==ON) { fd_set readfs; FD_ZERO (&readfs); /* clears readfs */ FD_SET (sock, &readfs); /* adds a stream */ fd_set writefs; FD_ZERO (&writefs); /* clears readfs */ FD_SET (sock, &writefs); /* adds a stream */ /* set the timer to 1.5 second */ struct timeval timeout; timeout.tv_sec = 1; /* 1 s */ timeout.tv_usec = 5 * 100 * 1000; /* 500 ms */ int err2 = select (sock + 1, &readfs, &writefs, NULL, &timeout); switch (err2) { case 0: /* timeout */ boolll==OFF; break; case -1: /* error */ puts ("error\n"); boolll==OFF; break; default: /* stream event */ /* - data has been received */ if (FD_ISSET (sock, &readfs)) { printf("lecture\n"); int err = SSL_read(ssl, buf, sizeof(buf)-1); if (err <= 0) { perror("call to read\n"); exit(-5); } buf[err] = '\0'; printf ("Received %d chars:'%s'\n", err, buf); } /* - data has been sent */ if (FD_ISSET (sock, &writefs)) { printf("ecriture\n"); int err = SSL_write(ssl, hello, sizeof(hello)); if (err <= 0) { perror("call to write\n"); exit(-5); } } }
et le client n'a pas l'air de se mettre en attente d'évènement lecture...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 /* Receive data from the SSL client */ err = SSL_read(ssl, buf, sizeof(buf) - 1); RETURN_SSL(err); buf[err] = '\0'; printf ("Received %d chars:'%s'\n", err, buf); ////////////////////////////////////////////////////////////////////////// /* Send data to the SSL client */ err = SSL_write(ssl, "This message is from the SSL server",strlen("This message is from the SSL server")); RETURN_SSL(err);
est ce que c'est du au fait que j'utilise SSL? ou alors est ce que j'ai raté un truc sur la fonction select?
merci par avance pour vos réponses
Partager