voici un morceau choisi de mon code, avec :

sock le descripteur de la socket de connexion
sockcom la socket de communication qui en resulte.


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
 
  /* creation de la socket */
  if  (  (sock = socket(AF_INET , SOCK_STREAM , 0 )) < 0 ) {
    perror("socket");
    exit(1);
  }
 
  memset(&sin , 0 , sizeof(sin));
  sin.sin_addr.s_addr = htonl(INADDR_ANY);
  sin.sin_port = htons(server_port);
  sin.sin_family = AF_INET;
 
  if ( bind(sock, (struct sockaddr *)&sin , sizeof(sin)) < 0 ){
    perror("bind");
    exit(1);
  }
 
  if (listen(sock , 5)==-1){
    perror("listen");
    exit(1);
  }
 
  while(1){
    if (  (sockcom = accept( sock , (struct sockaddr*)&hp , &fromlen)) == -1 ){
      perror("accept");
      exit(1);
    }
 
    switch(fork()){
          /* le fils travaille sur sockcom et ferme sock */
          /* le pere ferme sockcom et ne fait rien d'autre */
    }
   } /* while */
Donc un code de server de base. Le souci , c'est que accept marche nickel pour la premiere requete entrante, me crée sockcom et tout parfait, mais apres cette première requete , sock prend la valeur [0] et je me retrouve avec accept qui me retourne ENOTSOCK (socket operation on non-socket).

Un printf avant et apres accept met ça en évidence.

Quelqu'un a une idée ??
Merci