Bonsoir,

J'ai un souci avec mon code d'un petit serveur en C que je suis en train de developpez. En effet, je peux sans problème faire des read, mais les write échoue et perror me dit "Bad Address". Je pense que cela vien de ma façon de créer les structures utilisée dans le accept, mais je vois pas comment faire.

Voici le code que j'utilise.



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
void *serveur(void *arg){
  int  pnum;
  int  sock;
  int  nouvelle;
  sock  = socket (AF_INET,SOCK_STREAM , 0);
  if (sock < 0) {
      perror ("socket");
      exit (1);
  }
 
  struct sockaddr_in mon_adresse;
  mon_adresse.sin_port = htons(30000);
  mon_adresse.sin_family = AF_INET;
  mon_adresse.sin_addr.s_addr = htonl(INADDR_ANY);
 
  if (bind (sock, (struct sockaddr*)&mon_adresse, sizeof(mon_adresse)) < 0) {
      perror ("bind");
      exit (1);
  }
  if (listen (sock, 5) < 0) {
      perror ("listen");
      exit (1);
  }
  while (1) {
	  struct sockaddr_in adresse_client;
	  socklen_t lg_adresse_client = sizeof(adresse_client);
      nouvelle = accept (sock, (struct sockaddr*)&adresse_client,&lg_adresse_client);
	  printf("sin_family : %d\nsin_port : %d\nsin addr : %d\n", adresse_client.sin_family, ntohs(adresse_client.sin_port), adresse_client.sin_addr.s_addr);
      if (nouvelle < 0) {
          perror ("erreur lors de accept");
          exit (1);
      }
      int i = write(nouvelle, 'O', sizeof(char));
	  printf("écrit : %d; fd : %d\n", i, nouvelle);
      perror("erreur de write");
 
 
 
 
	//  printf("création d'un thread pour le client\n");
     // pthread_t client_t;
	  //  pthread_create(&client_t, NULL, traiter_client, client_socket);
 
  }
}
Merci par avance !