Commit 685f1984de3a3c938fac2aad27de8f5e37fc9389

Authored by Speedclocker
1 parent 8d95b38e

Ajout threads

Sioux/sioux
No preview for this file type
Sioux/sioux.c
... ... @@ -7,9 +7,14 @@
7 7 #include <string.h>
8 8 #include <netdb.h>
9 9 #include <arpa/inet.h>
  10 +#include <pthread.h>
10 11  
11 12 #define BUFF_SIZE 100
12 13  
  14 +
  15 +
  16 +
  17 +
13 18 int initialisationServeur(char* service)
14 19 {
15 20 int sock_fd;
... ... @@ -57,15 +62,18 @@ int initialisationServeur(char* service)
57 62 return sock_fd;
58 63 }
59 64  
60   -void reponseConnexion(int sock)
  65 +void* reponseConnexion(void* sock)
61 66 {
62 67 printf("Connected\n");
63 68 char buffer[BUFF_SIZE];
64 69  
65   - FILE* sockdial_stream = fdopen(sock, "a+");
  70 + FILE* sockdial_stream = fdopen(*((int*)(sock)), "a+");
  71 +
  72 + printf("Sock : %d // Stream : %p \n", *((int*)(sock)), sockdial_stream);
66 73  
67 74 while(strcmp(buffer, "EXIT\n")!=0)
68 75 {
  76 + printf("WAIT\n");
69 77 fgets(buffer, BUFF_SIZE, sockdial_stream);
70 78  
71 79 printf("Le message reçu : %s", buffer);
... ... @@ -79,6 +87,19 @@ void reponseConnexion(int sock)
79 87  
80 88 }
81 89  
  90 +
  91 +int lanceThread(void(* fonction) (void *), void* arg, int size)
  92 +{
  93 + pthread_t thr_id;
  94 +
  95 + if(pthread_create(&thr_id, NULL, (void*)fonction, arg )!=0) { fprintf(stderr, "Le thread n'a pas pu être créé.\n"); return -1; }
  96 +
  97 + pthread_detach(thr_id);
  98 +
  99 + return 0;
  100 +}
  101 +
  102 +
82 103 int boucleServeur(int socket, void(* fctConnex)(int))
83 104 {
84 105 int sock_dial;
... ... @@ -90,8 +111,8 @@ int boucleServeur(int socket, void(* fctConnex)(int))
90 111 printf("-- boucle --\n");
91 112 if((sock_dial=accept(socket, NULL, NULL)) < 0){ fprintf(stderr, "Error accept dialogue\n"); return -1; }
92 113 printf("Dialogue ACCEPTED\n");
93   -
94   - fctConnex(sock_dial);
  114 +
  115 + lanceThread((void*)fctConnex, (void*)&sock_dial, sizeof(sock_dial));
95 116 }
96 117 }
97 118  
... ... @@ -122,10 +143,10 @@ int main(int argc, char* argv[])
122 143  
123 144 int sock_fd=initialisationServeur(port);
124 145  
125   - if( sock_fd==-1 ) { fprintf(stderr, "Initialisaiton du serveur impossible\n"); return -1; }
  146 + if( sock_fd==-1 ) { fprintf(stderr, "Initialisation du serveur impossible\n"); return -1; }
126 147  
127 148  
128   - boucleServeur(sock_fd, reponseConnexion);
  149 + boucleServeur(sock_fd, (void*)&reponseConnexion);
129 150 return 0;
130 151 }
131 152  
... ...
Sioux/sioux.o 0 → 100644
No preview for this file type
Sioux/threadsSocket.c 0 → 100644
... ... @@ -0,0 +1,21 @@
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <pthread.h>
  4 +
  5 +
  6 +int lanceThread(void(* fonction) (void *), void* arg, int size)
  7 +{
  8 + pthread_t thr_id;
  9 +
  10 + if(pthread_create(&thr_id, NULL, fonction, arg)!=0) { fprintf(stderr, "Le thread n'a pas pu être créé.\n"); return -1; }
  11 +
  12 + pthread_detach(thr_id);
  13 +
  14 +
  15 +
  16 +}
  17 +
  18 +int main(void)
  19 +{
  20 +
  21 +}
... ...